
環境は
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が出るものと出ないものがあるのでしょう?
ご教授宜しく御願い致します。
No.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- …
No.1
- 回答日時:
(素人目からすると)「挙動は未定義」な気がします。
とりあえずtitleが潰れてしまうのを回避するために
group by address, title
とすることは出来るとは思いますが・・・
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
IEで「file://」プロトコルが使...
-
VB初心者。小数点以下の表示で...
-
SUN BBSの改造方法
-
wordの数式について 定積分を書...
-
ラジオボタンが両方とも選択で...
-
「value」に2つの値をセットす...
-
VB.net データーグリッドビュー...
-
FORMのselectの選択肢を最初か...
-
select値をhiddenのvalueに渡し...
-
掲示板(kentさんの所のsunbbs...
-
チェックボックスの返す値
-
[HTML]プルダウンメニューの横...
-
左右のフレームを同時にスクロ...
-
WEBアプリケーションからフォル...
-
INPUT TYPE
-
(Perl)ReadParseによるハッシ...
-
OPTIONタグにループは使えない...
-
チェックボックスとセレクトボ...
-
CGI によるファイルのアップロード
-
<select>タグの幅設定
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ローカルテストサーバーと本番...
-
VB初心者。小数点以下の表示で...
-
サイトの階層について
-
ブックマークからのアクセスを...
-
GoogleMapsAPIを利用したマッシ...
-
Lightboxの表示位置に関して質...
-
拡張子'html'と'htm'はどっちが...
-
外のhtmlに飛ばせる。
-
ホームページビルダー10のバグ??
-
vsftpd+sslでアップロードできない
-
URLバーに日本語を表示させたい
-
SELECTでgroup byした時の挙動
-
Excelのセルに HTML を貼りつけ...
-
IEで「file://」プロトコルが使...
-
FORMを中央に表示したい
-
SUN BBSの改造方法
-
wordの数式について 定積分を書...
-
掲示板(kentさんの所のsunbbs...
-
ラジオボタンが両方とも選択で...
-
「value」に2つの値をセットす...
おすすめ情報