2017-04-27 9 views
-1

到達できていない間は:参加のテーブルにそれらの一つは、私は、クエリを書いた

SELECT `notification`.`nid`, `notification`.`type`, `notification`.`read`, `notification`.`time`, `user`.`pro_img`, `user`.`fname` ,`user`.`lname`, `user`.`username`, `accommodation`.`aid`, `accommodation`.`title`, `accommodation`.`home_img` 
FROM `notification` RIGHT OUTER JOIN `user` ON `notification`.`rid`=`user`.`id` RIGHT OUTER JOIN `accommodation` ON `notification`.`acco_id`=`accommodation`.`aid` 
WHERE `notification`.`uid`=$uid ORDER BY `notification`.`time` DESC; 

私はnotificationながら結果を持っていると思います。 acco_id = accommodationaidはとても空の列を見つけokですが、私は、行

+0

こんにちは、あなたのデータベース構造ですか? – Goikiu

答えて

1

あなたのクエリは一緒に行っていないいくつかのことを組み合わせているしたくないです。 right joinsあなたがあなたのケースuseraccomodationで、右側の表にあります何も保持されます使用して、これは役に立たないでしょう同じ左側でそれらのうちの2つを使用しています。また、joinsの左側を含むwhereにも条件があります。これにより、right joinsは無意味になります。

あなただけrightからleft joinsに変更する必要がある、あなたは関係なく、それらのusersaccomodationsかと一致している、すべてのnotificationsをしたいと仮定。

SELECT notification.nid, 
     notification.type, 
     notification.read, 
     notification.time, 
     user.pro_img, 
     user.fname, 
     user.lname, 
     user.username, 
     accommodation.aid, 
     accommodation.title, 
     accommodation.home_img 
FROM notification 
LEFT OUTER JOIN 
     user 
ON  notification.rid = user.id 
LEFT OUTER JOIN 
     accommodation 
ON  notification.acco_id = accommodation.aid 
WHERE notification.uid = $uid 
ORDER BY notification.time DESC 

これはnotification内のすべての行を保持し、他のテーブル(単数または複数)に一致する行が存在しない場合null値とそれらと一致します。

関連する問題