2017-04-24 12 views
0

複数のテーブルからデータを取得して、通知フィードを作成しようとしています。複数のテーブルからデータを選択するPHP/Mysql

私は3つのテーブルがあります。私は、通知を確認するために、アイコンをクリックして、私はそうでは、ドロップダウンリストとしてだけ新しいものを表示したい場合はユーザーuser_notificationuser_comments

user_notificationテーブル私が持っている行"状態""新しい" することができid_fromid_ownerまたは"old"、そのように私は何を取り出すべきかを知っていますが、私はそれらの通知から誰かの情報を得る必要があるときに自分の問題が発生しています。など

これは私が取得しようとしていますHTMLです:

while ($row_notification = $result_load_notifications->fetch_assoc()) { 

      echo '<li class="dropdown-item"> 
        <img src="'.$row_notification["avatar"].'" class="avatar-feed" alt="'.$row_notification["name"].'" /><p><strong>'.$row_notification["name"].'</strong> new <a href="https://sample.com/user/'.$_SESSION['alias'].'/#comment-'.$row_notification["id_comment"].'">comment</a> notification.<br> 
        <time class="date-post" datetime="'.$row_notification["date"].'"></time></p> 
        </li>'; 
      echo '<li class="dropdown-divider"></li>'; 

     } 

をそして、これは私が仕事ができると思ったがなかったPHP /のMysqliです:PHPで

SELECT 
    * 
FROM 
    user_notification n, 
    users u, 
    user_comments c 
WHERE 
    n.status='new' 
    AND 
    n.id_owner=$session_id 
    AND 
    u.id_user=n.id_from 
    AND 
    c.id_owner=n.id_owner 

$load_notifications = mysqli_query($conn, "SELECT * user_notification n, users u, user_comments c WHERE n.status='new' AND n.id_owner=$session_id AND u.id_user=n.id_from AND c.id_owner=n.id_owner"); 

このコードは機能しません。間違っていますか? (私は専門家ではない)私はテーブル間の関係がないのですか?

どのようなヒントもありがとうございます。 ありがとうございました。

+0

'SELECT * FROM user_notification n、.... ' –

+1

あなたのSQLは無効です。あなたは' FROM'節を指定していません。また、あなたのコードはSQLインジェクションに対して脆弱です:** SQLを生成するために文字列連結または文字列補間を使用しないでください!** *常にパラメータ化されたクエリを使用してください。* – Dai

+0

それはどうですか?あなたはSQLインジェクションのために広く開いています。 mysqliを使用しているので、[prepared statements](http://php.net/manual/en/mysqli.quickstart.prepared-statements.php)と[bind_param](http://php.net/ manual/en/mysqli-stmt.bind-param.php)。 – aynber

答えて

0
SELECT 
* 
FROM 
users u 
INNER JOIN user_notification n ON n.user_id = u.id 
INNER JOIN user_comments c ON c.user_id = u.id 

WHERE n.status = '新しい' と n.id_owner = $ session_idの と u.id_user = n.id_from AND c.id_owner = n.id_owner

ます

JOINを使用して複数のテーブルから通常の関係でデータを選択するには、

で外部キーを使用する必要があります
+0

助けてくれてありがとうが、アドバイスしたものを実装できませんでした。 –

0

私は最終的にどのようにこの作品を理解するためのステップでデータステップをretriving、私の問題を解決し、このコード(それは良い習慣ですが、それが働いたかどうかわからない)になってしまった可能性があり:

SELECT 
u.name, u.avatar, c.id_comment, c.date 
FROM user_notification n, users u, user_comments c 
WHERE n.id_owner = ? 
AND n.notification_status = ? 
AND u.id_user = n.id_from 
AND c.id_user= n.id_from 
AND c.id_owner = n.id_owner 
関連する問題