2つのMySQL関数は、それぞれ独立して動作しますが、ランダムな結果を返します。これらの2つのクエリを考えてみましょう:2つのMySQL関数が独立して動作しますが、結合されていない場合(RAND()?)
SELECT * FROM table_categories WHERE id = 8
クエリ2
私のテーブルの設定によると、この一貫:
クエリ1
は、これは明らかにid=8
行を私に返します1〜16の数値を返します。
組み合わさ
SELECT cat.id FROM table_categories cat
LEFT JOIN table_user_to_category u2c
ON u2c.cat_id = cat.id AND u2c.user_id = 0
ORDER BY IFNULL(u2c.count,0), RAND() LIMIT 1
、これは時には、時には何、時には3、2行を返さない、table_categories
から行を返します。何が一体?
SELECT * FROM table_categories WHERE id = (
SELECT cat.id FROM table_categories cat
LEFT JOIN table_user_to_category u2c
ON u2c.cat_id = cat.id AND u2c.user_id = 0
ORDER BY IFNULL(u2c.count,0), RAND() LIMIT 1)
これはRAND()
のためですか?私はそれを把握することはできません!私には奇妙な行動があるように見えますが、私は相対的な初心者です。
ちょっとしたアドバイス。このようなクエリを大量に読み込んだテーブルに対して実行すると、データベースが無駄になります。 RAND()は耐性があります。 –
@MikePurcell、大いに読んでいるテーブルのための良いアドバイス、私の場合はありません。めったに読み込まれず、サブクエリが10行ほど返します。これを見てください:http://stackoverflow.com/questions/4710048/good-idea-bad-idea-using-mysql-rand-outside-of-a-small-set-of-subquery-result – Kyle