MySQLでのフィールドの結合

このQ&Aのポイント
  • MySQLでのフィールドの結合方法を学びましょう。
  • openofficeのデータベースエンジンをHSQLからMySQLに変更した場合、クエリの結果が異なる問題が発生します。
  • 識別番号と区分のフィールドを結合する際に、MySQLで正しい結果を得る方法を教えてください。
回答を見る
  • ベストアンサー

MySQLでのフィールドの結合

こんにちはurudakaraといいます。よろしくお願いします。 私はSQLに関する知識がほとんどありませんがよろしくお願いします。 私はopenofficeをubuntu10.04上で使っています。 業務上データが大量になったためopenofficeについているHSQLというデータベースエンジンでは動作が遅くなったので、データベースエンジンをMySQLに変えました。 するとHSQLでは問題なく結果が出ていたクエリが違う数値を出すようになりました。 まずopenofficeのbaseのテーブルで 識別番号(MySQL Administrator で見るとData Type は VACHAR(50)となってます。) 区分(MySQL Administrator で見るとData Type は DECIMAL(50,0)となってます。) というフィールドがあります。 この状態でopenofficeのクエリのデザイン画面でフィールド欄に "識別番号"+"区分" としてました。 "識別番号1234"+"区分5"の場合  HSQLの場合は結果が 12345 MySQLの場合は結果が 1239 となります。 MySQLでもHSQLの時と同じように結果を出すようにするにはどうSQL文を書けば良いでしょうか? 初心者で分からない事ばかりですが、よろしくお願いします。

  • MySQL
  • 回答数1
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
  • moousi
  • ベストアンサー率70% (21/30)
回答No.1

12345になるはずが、1239になるということ、 文字列関数のconcatを使えば解決するんではないでしょうか? mysql> select 123+456; +---------+ | 123+456 | +---------+ | 579 | +---------+ 1 row in set (0.00 sec) mysql> select concat(123,456); +-----------------+ | concat(123,456) | +-----------------+ | 123456 | +-----------------+ 1 row in set (0.00 sec)

mash001
質問者

お礼

こんにちはmoousiさん 教えてもらったconcatですが、ふと思ったのが、Data TypeがVACHAR(50)とDECIMAL(50,0)が違う為におこるのでは・・・と思いました。 データ型を変える勉強を少ししてからもしわからなければ、もう一度質問しようと思います。 Concat関数を教えてくれてありがとうございました。 これからも質問することもあるかと思いますが、よろしくお願いします。

mash001
質問者

補足

返信が遅れてごめんなさい。 迅速な回答ありがとうございます。 回答を参考に以下の様にopenofficeにSQLをうちました。 select concat("識別番号","区分") とやりましたが以下の様なエラーがでました。 SQL ステータス: HY000 エラーコード: 1000 parse error, expecting `BETWEEN' or `IN' or `SQL_TOKEN_LIKE' どのようにやったらエラーが出なくなるでしょうか?

関連するQ&A

  • MySQL SELECT文についての質問

    sql文について困っているので質問させてください。 以下のデータがあるとします。 番号  フィールド1   フィールド2 ------------------------------------ 1        0       あ 2        1       う 3        0       か 4        0       こ 5        1       た 6        0       ね 7        1       も 8        0       わ フィールド1が1で[あ行]であれば フィールド2が[あ行]である番号を取得し その件数を取得したいのです。 つまりクエリの実行結果を以下のようにしたいです。 番号  フィールド1   フィールド2 ------------------------------------ 1        0       あ 2        1       う 件数2件 mysqlのバージョンが4.0.22なのでサブクエリが使えません。 サブクエリを使わないで上記の結果を得ることはできるのでしょうか? よろしくお願いします。

    • ベストアンサー
    • MySQL
  • MySQLのバージョンが異なる場合の設定

    PHPでMySQLのデータベースのバージョンが異なる場合の設定について詳しい方、教えてください。 MySQL4.1より大きい場合は、mysql_query("SET NAMES 'utf8'");とし、 MySQL5.0より大きい場合は、mysql_query("SET sql_mode=''");とします。 MySQL4.0.27の場合はどうするのでしょうか?

  • MySQLのfield数の上限について

    MySQLでfieldを2916個作ろうと思ったのですが、上限が1000個なのか、1001個目を作ろうとすると下のようなエラーが出ます。 ERROR 1005 (HY000): Can't create table 'features.#sql-1664_18' (errno: 139) featuresというのはデータベース名です。上限をなくす、または大きくする方法があれば教えて下さい。よろしくお願いします。

  • MySQLからフィールド名のリストを取り出し、一部のフィールド名を除外したい場合

    PHP + MySQLにて テーブルからフィールド名だけを取得し、さらに一部のフィールド名を除外したいです。 レコードじゃないのでis not構文は使えませんでした。 何かいい方法があれば教えてください。 $sql = "select * from table"; //tableテーブルからフィールド名を取り出し $rs = mysql_query($sql); $fields = mysql_num_fields($rs); $column = array(); for ( $i=0; $i<$fields; $i++ ) { $column[$i] = mysql_field_name($rs, $i); }

    • ベストアンサー
    • MySQL
  • PHP-mysql フィールドの値を取得

    認証ページを作成していますが、 フィールドの値を取得できずに困っています。 $r = ?????????????????????; の部分の記述が分かりません。 ($rに、フォームで入力した$idのデータを参照して、もしあったら、その行のPasswdフィールドとフォームで入力した$passを比較したい) よろしくお願いいたします。 $id・・・formの入力内容(Emailフィールドに該当) $pass・・・formの入力内容(Passwdフィールドに該当) <? $hostname = "*"; $username = "*"; $password = "*"; $dbname = "*"; $tablename = "*"; $connect = mysql_connect($hostname, $username, $password) or die ("サーバに接続できません"); mysql_select_db($dbname) or die ("データベースに接続できません"); $sql = "SELECT Passwd FROM $tablename where Email='$id'"; $result = mysql_query($sql, $connect) or die ("クエリーを実行できません"); $num_rows = mysql_num_rows($result); $r = ?????????????????????; print "$num_rows\n"; print "$r\n"; if( $num_rows = 0 ) { print "ユーザ登録されていません。"; print '<a href="">こちらから登録してください。</a>'; session_destroy(); exit; } if( $r != $pass ) { print "パスワードが違います。"; session_destroy(); exit; } print "認証OK"; mysql_close($connect); ?>

    • ベストアンサー
    • PHP
  • mysqlでテキストフィールドへPHPからデータ

    もともと考え方がおかしいのかも知れませんが PHPでデータをよみます。 mysql ではTEXTフィールドがあります $r=fread($fp, 長さ(可変長)); でこれからです。 Buf4がTEXTフィールド); $sql="insert into $tbn4 ( Buf4 ) values ($r); sql実行。データがはいりません。

    • ベストアンサー
    • PHP
  • フィールド名に日付を入れたい

    いつも回答ありがとうございます。 MySQL&PHPを利用しております。 下記のように書いたのですが、フィールド追加できません。 $today = date("ymd"); $sql = "ALTER TABLE book1 ADD $today TEXT NOT NULL"; $query = mysql_query($sql, $link); $todayの所を、 $today = "d" . date("ymd"); のように文字を先頭に置くなどするとフィールドを追加できました。 日付はフィールド名として指定できないのでしょうか? CRONで毎日、日付のフィールドを追加して、データの変化を見ていきたいと考えています。 わかる方お願いします。

    • ベストアンサー
    • MySQL
  • date型フィールドへのデータ挿入がうまくいきません。

    date型フィールドへのデータ挿入がうまくいきません。 PHP5.2.6,MySql5.0.51bを利用しています。 フィールドにdate型を指定して、phpからmysql_queryで"2010-1-1"というデータを挿入したところ"0000-00-00"として格納されていました。 phpMyAdminから「挿入」・「SQL」で"2010-1-1"を挿入したところちゃんと"2010-01-01"として格納されました。 phpから"2010-1-1"というデータを"2010-01-01"として格納するにはどうすればいいのでしょうか? 文字コードはphp・MySqlともにUTF-8を使用しています。

    • ベストアンサー
    • PHP
  • MySQLでフィールドの並び替え

    お世話になります。 PHP+MySQLで投票システムの構築をして、管理画面をもう少し見易くしようと思っております。 現在は、単純に投票されたフィールドに対しカウントアップをさせて1回投票されたら「 1 」、 2回投票されたら「 2 」。 「 3 」、「 4 」、「 5 」・・・という様になっております。 そのデータベースへINSERTされたデータをSELECTする際に、数値( 投票数 )が 多い順に並べ替えをしたいと思っておりますが、どの様なクエリを投げてあげれば良いかが 全く分かりません。 例えば、【 ORDER BY フィールド名 】とすると、対象のフィールド名でソートされるのは、 勿論理解しているつもりですが( プラス DESCで降順等 )、今回は 1、りんご → フィールド名: 【 item1 】 2、みかん → フィールド名: 【 item2 】 3、ぶどう → フィールド名: 【 item3 】 という様にフィールド名は違うので、今回の仕様でのソートという概念が理解できません。 ----------------------------------- ▼スペックについて PHP5.3.3 5.0.77 ----------------------------------- ご教示いただけると幸いです。 どうぞよろしくお願い申し上げます。

    • ベストアンサー
    • PHP
  • Mysqlにhtmlのフォームから登録できません。

    WindowsでphpからMysqlにデータを登録しようと思っているのですが、うまくいきません。 データベースの内容をHTML,PHPで書き出すことは正常にできたのですが、登校フォームから入力してもデータが書き込まれません。フォームのHTMLはおそらく間違ってないと思います。 これが受け入れ側のファイルの内容です。 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html lang="ja"> <head> <title></title> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> </head> <body> <?php extract($_POST); mysql_connect('localhost','root','パスワード'); mysql_select_db('データベース名'); $sql = "insert into テーブル名 values('フィールド1の値','フィールド2の値','フィールド3の値','フィールド4の値',0)"; mysql_query($sql); ?> </body> </html> ファイル名は.phpの拡張子で保存してます。 Mysqlの環境設定はできているのに何故データを登録できないのでしょうか? 詳しい方どうか教えてください。よろしくお願いします。