2012-02-22 14 views
-1

私はウェブサイトを持っていますので、誰かがボタンをクリックすると、その投稿を好きな人とその人が好きな人を見ることができます。リスト。複数のテーブルからのクエリ

投稿のボタンをクリックすると、投稿のIDを含む変数が取得されます。そのIDを使用して、likes.postと等しいかどうかを確認し、その行からlikes.usersを取得する必要があります。そのIDでユーザテーブル(users.id)からユーザ情報を取得し、フォローテーブルからそのユーザ(follow.user)もフォローテーブルから数える。

これを取得するためのクエリを初めて作成しようとすると失敗し、「 'WHERE 1 = likes.post' 9行目」の構文エラーが表示されますが、より良いバージョン、またパフォーマンスは、これを使用するトラフィックを考慮すると大きな問題です。ここ

は何現在行われたがdoesntの仕事は次のとおりです。

$query = "SELECT likes.user, users.*, 
    COUNT(follow.follower) AS Followers, 
    COUNT(follow2.following) AS Followings 
    from likes 
    LEFT JOIN follow ON likes.user = follow.follower 
    LEFT JOIN follow AS follow2 ON likes.user = follow.follower 
    LEFT JOIN users ON likes.user = users.id 
    GROUP BY likes 
    WHERE $liked = likes.post 
    "; 

誰かがそれを正しく行う方法を知っている場合は、私はそれのまわりで私の頭を取得カントsindsセーバー人生だろう。

答えて

0

whats $likedここですか?

$はPHPで評価を受ける好きで、その値がない場合、それはあなたがあなたのテーブルのいくつかの特定の列名で$likedを置き換える必要がありWHERE = likes.post

と構文エラーになります。

Where clauseは、数値ではなく列名を必要としています。 $likedの値が1

UPDATE

変更が

WHERE likes.post = $liked 
+0

同類を選択されていますポストの変数であり、それはそのはずポストのIDが含まれています人々が好きな場所にlikes.postとマッチします。 –

+0

更新された回答、これが解決することを願っています。 – linuxeasy

+0

これは同じ構文エラー –

0

にあなたのコードであるのに対し、代わりに文字列を連結することにより、クエリを構築する、あなたは本当にPDOを使用する必要があります。利点のいくつかは以下のとおりです。

  • セキュリティ - SQLインジェクションにあまりオープン
  • 明快 - 簡単なクエリのパラメータが
  • パフォーマンスしているかを確認するには - DBサーバがキャッシュにできる可能性があります

    • :クエリ、代わりにここで毎回

    それを再コンパイルするには、元のクエリの問題の一部ですはwhere

  • 表別名follow2が作成されませんが、決して
  • group byを使用する前に、非集約列が
+0

ありがとう、これは役に立ちますが、私は最初に動作するようにクエリを取得したいのです –

+0

元のクエリの問題のリストを追加しました。 –

関連する問題