dポイントプレゼントキャンペーン実施中!

環境は
PHP5.3.3
MySQL5.0.95 です。

現在TBL1にURL(address)と、そのURLのタイトルタグの中身(title)と、独自に数えてる数字(count)を入れています。

その1つのアドレスに対してcountの数は色々あるので、
そのcountをアドレスと対にして合計したもの(SUM)で並び替えています。
(分かりづらかったらすいません。addressは主キーではないということです。)

タイトルに関しては最近取得し始めたところで入ってるところと入っていないところがあります。
その状況下で

SELECT address, title, sum(count) as SUM FROM TBL1 where address LIKE "%hoge.com%" group by address order by sum DESC LIMIT 10;

こういうSQL文を使ってSELECTした際に、
hoge.com以下の例えばhoge.com/1.html, hoge.com/2.html, ...
といった感じのURLごとにSUMの数で並び変わるのですが
この場合titleはどのカラムを参照していることになるのですか?

(address) (title) (SUM)
hoge.com/1.html | test1 | 500 |
hoge.com/2.html | test2 | 400 |
hoge.com/3.html |    | 300 |
hoge.com/4.html | test4 | 200 |
hoge.com/5.html | test5 | 100 |
hoge.com/6.html |    | 40 |
hoge.com/7.html | test7 | 20 |
hoge.com/8.html |    | 10 |
hoge.com/9.html |    | 6 |
hoge.com/10.html |    | 5 |

こんな結果だったとして、titleが入っているものと入っていないものの区別がつきません。
入っていないURL(例えばhoge.com/3.html)のaddressカラムも全て空というわけではありません。
逆に入っているものに関しては、全ての行にtitleが入っているわけではありません。
主キーは今回のSELECTとは関係してない"ID"です。
ID | address | count | title
1 | hoge.com/1.html | 3 | test1
2 | hoge.com/1.html | 10 |
3 | hoge.com/1.html | 43 | test1

ID | address | count | title
1 | hoge.com/3.html | 4 | test3
2 | hoge.com/3.html | 3 |
3 | hoge.com/3.html | 42 |

それぞれは主キーに応じてcountが個別にある状態です。
上記は正確ではありませんが、こんな感じです。
こうして共に入ったり入ってなかったりするのにSELECTした結果に
入ってるものと入ってないものが出てくるのが分かりません。

ちなみに、検証すると一番countが多い行にtitleが入っていたらSELECT文にも出てくるというわけではないようです。

なぜtitleが出るものと出ないものがあるのでしょう?
ご教授宜しく御願い致します。

A 回答 (2件)

MySQL の仕様では、GROUP BY した際に一意にならないカラムをSELECT句に指定した場合は、そのグループに属する値のどれかを返します。

その中のどれを返すかについては特に基準は有りませんので、不確定です。

詳しくは下記のページを参照して下さい。
http://dev.mysql.com/doc/refman/5.1/ja/group-by- …

なお、 null 以外は同じ値になるのでしたら、MAX 関数などを使えばその値が取得できるかと。
例) SELECT address, MAX(title), SUM(count) as SUM FROM ・・・

参考URL:http://dev.mysql.com/doc/refman/5.1/ja/group-by- …
    • good
    • 0

(素人目からすると)「挙動は未定義」な気がします。



とりあえずtitleが潰れてしまうのを回避するために

group by address, title

とすることは出来るとは思いますが・・・
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!