2016-08-03 47 views
2

這是我的SELECT查詢用於從數據庫搜索用戶。問題是我只能得到那些在postImg表中發佈任何內容的用戶的搜索結果。否則,沒有用戶找到。我想以這樣的方式搜索,即使任何用戶沒有發佈任何帖子,那麼它應該被發現。我使用此查詢:如何使用連接從兩個表中搜索數據

<?php 
     $sql = "SELECT * FROM postImg LEFT JOIN user ON postImg.userID=user.userID 
     WHERE user.userID='".$page_owner."' AND (userName LIKE '%".$searchVal."%') GROUP BY user.userID "; 
     $res3 = mysql_query($sql) or die(mysql_error()); 
     while($row2=mysql_fetch_assoc($res3)){ 
     echo $row2['userName']; // From user Table 

     echo $row2['likes']; // From postImg table 
     echo $row2['posts']; // From postImg table 
     } ?> 
+0

所以你想要返回所有用戶,即使他們在'postImg'中沒有相應的行嗎?你有沒有嘗試改變'...從postImg LEFT JOIN用戶...'到'...從用戶LEFT JOIN postImg ...'? – Sean

回答

0
$sql = "SELECT * FROM postImg RIGHT JOIN user ON postImg.userID=user.userID 
    WHERE user.userID='".$page_owner."' AND (userName LIKE '%".$searchVal."%') GROUP BY user.userID "; 
+0

對我無效 –

+0

運行它時會發生什麼? –

+1

對不起,是的,它爲我工作非常感謝你很多這是如此簡單,但我不知道我沒有想到,我嘗試了內在的左外,但忘了試試吧非常感謝你 –

0

我認爲你要user LEFT JOIN postImg,還不如你在這裏的相反。

查詢寫入後將返回來自postImg的每條記錄,無論它是否具有關聯的user

顯然,你想每user他/她是否有postImg

順便提一下,我認爲將其更改爲RIGHT JOIN也可以,因爲Robert在中建議他的答案。但是,我可以指望我看到RIGHT加入的次數。 。 。因此,我建議翻轉表格名稱。 (「給他們,他們已經習慣了的東西。」)


編輯:  澄清(對花生畫廊的好處...): 這兩種形式的所謂的所謂的「外連接」等效。術語,LEFTRIGHT,簡單地指的是這兩個表中的一個是主...「的一個在LEFT側,」 之前(在原崗位所示在查詢postImg)字JOIN,或者「RIGHT上的那個」,JOIN。 (user)我將調用「master」的所有行以及可能找到的「other」表中的任何匹配值都將返回。

無論出於何種原因,我很少在生產代碼中找到RIGHT連接。這並不是說他們不能做當然,但只是我發現它不是(通常)完成。

+0

RIGHT JOIN爲我工作+1 –

相關問題