2012-03-13 17 views
2

データベースからすべての投稿を選択しようとしています(IDは、別のテーブルのIDで、ネットワークに接続している人を接続します)OR(投稿を選択する私はポストの作家です)。実際に私は自分のネットワーク内の人と自分の人からの投稿を取得しようとしています。mySQL - WHERE AND AND OR

私はこれを行う方法を見つけたが、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がある:ポスト作家のuserIdを。

自分の投稿とネットワークの投稿を選択するにはどうすればよいですか?

+0

は、あなたが同様にあなたのスキーマを投稿することができますか? – Starx

+0

@Starxはい、あなたがそれを書く方法を私に教えてくれるなら、それほど大雑把なものではありませんか? :) – skolind

+0

スキーマによって、私はあなたのテーブルがどのように私たちに表示されますか?投稿欄、データ型、さらにはサンプルデータが傷つきませんか? [sqlfiddle.com](http://www.sqlfiddle.com)を試してください – Starx

答えて

3

が欠けているように見えます:

$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

これは私がここに書いたときのエラーです。 – skolind

+1

@Kolind、ここで何をしようとしているのかちょっと混乱しています。このfidddle [update](http://www.sqlfiddle.com/#!2/18b07/9)があなたが探しているものであることを確認してください。 – Starx

1

あなたはあなたがあなたのコード内のいくつかのエラー

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

を持っているし、クエリのWHERE一部がカッコ

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

それはだチャットのためにあなたを招待しました – skolind

+0

を使用しているときに出力を複製しても、サンプルデータと予想される結果を投稿できますか? – Taryn

+0

「サンプルデータ」はどのようにしたいですか? – skolind

0

はこれを試してみてください不足している'()'

$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

10行目についてエラーが表示されます。 – skolind

+0

この構文は正しくありません.2つのWHERE句を持つことはできません。 – Taryn

+1

@ bluefeet:コードを最初に参照してください... WHERE句を単一のクエリで使用しませんでした... 2番目のWHERE句は内部クエリにあります... –

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