複数テーブルSELECT*、NULLのカラムに別の値が代入されて出力される
複数テーブルSELECT*、NULLのカラムに別の値が代入されて出力される
こんにちは。
MySQLの経験が未ださほどないので、単純なミスかも知れませんが
少しアドバイスをお願いします。
複数テーブルに対してSELECT *を行うと、
本来NULLになるべきカラムに別の値が入った状態で出力されます。
*同一データベース内です
[Table_A]
tel name links regtime
000000000 サンプルA okwave.jpA 1246247993
000000001 サンプルB okwave.jpB 1246248003
000000002 サンプルC okwave.jpC 1246249258
[Table_B]
subject name body password
サンプル書き込み1 サンプルD サンプル1。ここが本文... 22521343
サンプル書き込み2 サンプルE サンプル2。ここが本文... 4654387368
サンプル書き込み3 サンプルF サンプル3。ここが本文... 13213843843
[Database]
tel デフォルト: NULL, 型: TINYTEXT
name デフォルト: NULL, 型: TEXT
links デフォルト: NULL, 型: TEXT
regtime デフォルト: NULL, 型: INT
subject デフォルト: NULL, 型: TEXT
body デフォルト: NULL, 型: TEXT
password デフォルト: NULL, 型: TINYTEXT
このとき、SELECT * FROM `Database`.`Table_A`, `Database`.`Table_B` LIMIT 0, 30;
を実行して得られた結果が、
tel name links regtime subject name body password
000000000 サンプルA okwave.jpA 1246247993 NULL NULL NULL 22521343
000000001 サンプルB okwave.jpB 1246248003 NULL NULL NULL 22521343
000000002 サンプルC okwave.jpC 1246249258 NULL NULL NULL 22521343
000000000 NULL NULL 1246247993 サンプル書き込み1 サンプルD サンプル1。ここが本文... 22521343
000000000 NULL NULL 1246247993 サンプル書き込み2 サンプルE サンプル2。ここが本文... 4654387368
000000000 NULL NULL 1246247993 サンプル書き込み3 サンプルF サンプル3。ここが本文... 13213843843
このようになってしまいます。
そのテーブルが持たないカラムのうち数字のみが記録されているカラムだけ
勝手に別のテーブルに記録されている値が入った状態で出てきてしまうのです。
IPアドレスを記録してあるカラムの値にはドットが入っているためか、
上には該当せず、NULLはちゃんとNULLとして返ってきます。
他にも、数字以外の文字列を含むカラムのデータはすべて正常に動いています。
いろいろ調べている最中ですが、
phpMyAdminで上記のSQLクエリを実行しても同じ結果が得られたため、
テーブルの使い方が悪いのかクエリに何か足りないのかだと思います。
しかしまだ原因が特定できないので、ご助力いただきたいのです。
よろしくお願いします。
環境は、
MySQL: 5.1.34
文字セット: UTF-8 unicode
照合順序セット: utf8_general_ci
PHP: 5.2.9
回答(1件)
- 最新から表示
- |
- 回答順に表示
- |
- ベストアンサーのみ表示
No.1ベストアンサー20pt
テーブルAとBの結合処理がされていませんね
AとBがどんな関係にある(リレーション)のか等を明記してあげればいいと思います。
このままだと AとBの組み合わせ全パターンが出てしまいます。
AとBでキーになるものを設定してあげて
select * from テーブルA, テーブルB where テーブルA.キー = テーブルB.キー
といった具合に・・・
またテーブル結合のSelectは*を使うとデータが重くなってしまうので
使うカラムだけを指定してあげるといいでしょう
この回答へのお礼
早い回答ありがとうございます。
上のようにした理由は、
管理ページを作製する中でトップページに表示する際、
使用されるすべてのデータベース、テーブルから全データを単に羅列したかったからです。
しかしJOINやご指摘のものを使っても、ひとつのテーブルを基準に抽出しているところから
狙いとは違った動きになってしまします。
調べてまわりましたが、端から目的がズレていたのかも知れません。
複数回に分けてテーブルから抽出、書き込まれた順に並び替えることを少し考えようかなと思います。
ありがとうございました。
- 最新から表示
- |
- 回答順に表示
- |
- ベストアンサーのみ表示











