2012-03-13 40 views
2

我試圖從數據庫中選擇所有帖子(其中ID是=來自另一個表的ID,它連接了我在網絡中的人)或(選擇帖子我是這篇文章的作者)。其實我試圖從我的網絡和我自己的人的帖子。mySQL - 在哪裏,和/或選擇

我已經找到了如何做到這一點,但是當使用OR子句時,它選擇了兩次行。舉例來說,如果我寫了一篇文章,它會在從數據庫中回顯出來時被複制。

我的MySQL:

$sId = validate::intValidate($_SESSION['userId']); 
$sql = "SELECT * FROM networkPost 
      INNER JOIN authentication 
       ON networkPost.FK_networkYou=authentication.userId 
      INNER JOIN network 
       ON networkPost.FK_networkYou=network.networkYou 
      WHERE networkMe=$sId AND FK_networkYou=networkYou OR networkYou=$sId 
      ORDER BY networkPostId DESC"; 

networkYou是:後作家的用戶ID。

那麼如何選擇我自己的帖子和我的網絡帖子?

+0

您可以發佈您的架構呢? – Starx 2012-03-13 11:46:21

+0

@Starx是的,如果你會告訴我如何寫它,而不是雜亂的SO? :) – skolind 2012-03-13 11:49:55

+0

按模式,我的意思是告訴我們你的桌子是怎麼樣的?帖子字段,數據類型,甚至一些樣本數據不會受傷?嘗試[sqlfiddle.com](http://www.sqlfiddle.com) – Starx 2012-03-13 11:51:40

回答

3

你在你的代碼的一些錯誤

validate::intValidate($_SESSION['userId']); //missing square bracket 

和查詢的WHERE部分缺失括號

WHERE (networkMe=$sId AND FK_networkYou=networkYou) OR networkYou=$sId 
+0

這只是一個錯誤,當我在這裏寫:) – skolind 2012-03-13 11:44:36

+1

@Kolind,我有點困惑,關於你在這裏嘗試。看到這個fidddle [更新](http://www.sqlfiddle.com/#!2/18b07/9)應該是你在找什麼。 – Starx 2012-03-13 13:07:13

1

看起來像你缺少'()'

$sId = validate::intValidate($_SESSION['userId'); 
$sql = "SELECT * FROM networkPost 
      INNER JOIN authentication 
       ON networkPost.FK_networkYou=authentication.userId 
      INNER JOIN network 
       ON networkPost.FK_networkYou=network.networkYou 
      WHERE (networkMe=$sId AND FK_networkYou=networkYou) OR networkYou=$sId 
      ORDER BY networkPostId DESC"; 
+0

它是當我使用() – skolind 2012-03-13 11:45:02

+0

時,仍然可以複製輸出,您是否可以發佈一些樣本數據和您的預期結果? – Taryn 2012-03-13 11:45:29

+0

你想要什麼「樣本數據」? – skolind 2012-03-13 11:46:09

0

試試這個:

$sId = validate::intValidate($_SESSION['userId']); 
$sql = "SELECT DISTINCT * FROM networkPost np,authentication at,network n 
      WHERE 
       np.FK_networkYou=n.networkYou AND 
       np.FK_networkYou=at.userId AND 
       np.FK_networkYou in(SELECT DISTINCT np.FK_networkYou FROM networkPost np,authentication at,network n 
          WHERE np.FK_networkYou=n.networkYou AND 
           np.FK_networkYou=at.userId AND 
           (networkMe=$sId AND FK_networkYou=networkYou) OR networkYou=$sId 
           ORDER BY networkPostId DESC"); 
+0

我收到關於第10行的錯誤,它告訴我。 – skolind 2012-03-13 11:53:20

+0

此語法不正確,您不能有兩個WHERE子句。 – Taryn 2012-03-13 11:54:13

+1

@ bluefeet:先看代碼......我沒有在單個查詢中使用WHERE子句......第二個WHERE子句在內部查詢中...... – 2012-03-13 11:58:20

1

我在我的問題上找到了解決方案。我想要感謝Starx,我可能會生氣,對不起!我會讓你的答案是正確的。

但這裏是我的解決方案:

SELECT DISTINCT networkPost.*, authentication.* FROM networkPost 
      INNER JOIN authentication 
       ON networkPost.FK_networkYou=authentication.userId #Så jeg kan skrive hvem posteren er. 
      LEFT JOIN network 
       ON networkPost.FK_networkYou=network.networkYou 
      WHERE networkMe=$sId OR FK_networkYou=$sId 
      ORDER BY networkPostId DESC