2011-08-16 14 views
0
SELECT * 
FROM Posts 
WHERE MATCH (Posts.City) AGAINST ('Lujan') 

29行を表示します。しかし:0行を返す内部結合によるMySQLクエリ

SELECT Users.*, Posts.* 
FROM Users 
INNER JOIN Posts ON Users.User = Posts.User 
WHERE MATCH (Posts.City) AGAINST ('Lujan') 

私は全く同じ結果を得るべきですが、結果はゼロです。クエリに説明を追加

はエコー:

id select_type table type possible_keys key key_len ref rows Extra 
1 SIMPLE Posts fulltext city_comparator,user_comparator city_comparator 0  1 Using where 
1 SIMPLE Users eq_ref user_unique,user_comparator user_unique 62 chusmix.Posts.User 1  

私はそれが何を意味するのかわかりませんが、私は10+のユーザーを登録しているが、テーブルのユーザーにフルテキストインデックス「user_comparatorは」0のカーディナリティを持っていました。また、Users.User列のUniqueインデックスとUsers.IDのプライマリインデックスもあります。

INNER JOINを使用して何かが変更され、すべてのクエリが機能しなくなりました。これを修正するにはどうすればよいですか?ありがとう

+1

Lujanの都市があるユーザーと投稿はありません – Sathya

答えて

3

つまり、ユーザーテーブルには投稿テーブルと一致する行がありません。一致するものがなくても行を選択する場合は、外部結合を使用します(ケース内で右結合を使用してINNER JOINを変更します)。

1

これはあなたの行を返しますか?あなたの投稿レコードのUsersテーブルには、対応するユーザエントリが存在しない可能性があります。

SELECT * 
FROM Posts 
LEFT JOIN Users ON Users.User = Posts.User 
WHERE MATCH (Posts.City) AGAINST ('Lujan') 
関連する問題