从多个表PHP/Mysql中选择数据
我正在尝试从多个表中获取数据以构建通知提要 我有3个表:用户、用户通知和用户评论 当我点击图标查看通知时,我只想以下拉列表的形式显示新的通知,因此在用户通知表中,我有行“状态”,id\u from和id\u所有者,它们可以是“新的”或“旧的”,这样我知道要检索什么,但当我需要从这些通知中获取关于它是谁的信息并能够显示例如,个人资料图片、用户名、注释id等时,我的问题就出现了 这是我正在尝试获取的HTML:从多个表PHP/Mysql中选择数据,php,mysql,Php,Mysql,我正在尝试从多个表中获取数据以构建通知提要 我有3个表:用户、用户通知和用户评论 当我点击图标查看通知时,我只想以下拉列表的形式显示新的通知,因此在用户通知表中,我有行“状态”,id\u from和id\u所有者,它们可以是“新的”或“旧的”,这样我知道要检索什么,但当我需要从这些通知中获取关于它是谁的信息并能够显示例如,个人资料图片、用户名、注释id等时,我的问题就出现了 这是我正在尝试获取的HTML: while ($row_notification = $result_load_notif
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中:
$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");
那代码就是不起作用,我做错什么了吗?(我不是专家)我是否缺少表之间的关系
任何提示都将不胜感激,
谢谢。我终于可以解决我的问题了,一步一步地检索数据以了解这是如何工作的,并最终得到了这段代码(不确定这是否是一个好的实践,但它起了作用):
SELECT*FROM user\u notification n,…。
您的SQL无效,您没有指定FROM
子句。此外,您的代码容易受到SQL注入的攻击:永远不要使用字符串串联或字符串插值来生成SQL!始终使用参数化查询!那它怎么不工作了?您对SQL注入非常开放。因为您使用的是mysqli,所以利用and。另外,在生产代码中使用SELECT*
是一个坏主意。您应该始终显式命名要检索的列。感谢您的评论,我编辑了SQL以添加发件人,这是我的错误,抱歉。我实际上是在使用预先准备好的语句,只是为了快速书写而这样做@艾恩伯
$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");
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