在我的网站上,我正在尝试编写一个功能,用户可以选择从其他用户那里获取“更新”。当用户单击“接收更新”时,它会将数据库中的用户ID与他们希望从中接收更新的其他用户一起抛出。例如(4,5,6,7,8)。我的表看起来像这样
members | updates
-----------------
id | id
updates | member_id
| content
| content_date
当我查询数据库时,我想从更新表中删除成员中已指定用户的更新:更新。
$sql_updates = mysql_query("SELECT *
FROM updates a,
members b
WHERE a.member_id IN b.updates
ORDER BY a.content_date DESC
LIMIT 10");
while($row = mysql_fetch_array($sql_updates)) {
这是最好的方法吗?
答案 0 :(得分:4)
首先,正确拼写列名称 - mem_id
或member_id
,它会是什么?其次,这只是一个简单的内部联接:
SELECT members.id AS mem_id, updates, content, content_date
FROM members JOIN updates ON(members.id = updates.member_id)
ORDER BY content_date DESC
LIMIT 10;
答案 1 :(得分:0)
在Mysql中“IN”就像编程运算符的“OR”如果你在起诉你需要提供一个b.updates数组而不仅仅是列更新或使用子查询来返回数组
$sql_updates = mysql_query("
SELECT * FROM updates a, members b
WHERE a.mem_id IN (SELECT updates from members)
ORDER BY a.content_date DESC LIMIT 10");
其他或更好的方式可能是使用JOIN
$sql_updates = mysql_query("
SELECT * FROM updates a JOIN members b ON (a.mem_id = b.updates)
ORDER BY a.content_date DESC LIMIT 10");
答案 2 :(得分:0)
我建议使用第三个表“subscriptions”来链接“members”和“updates”表。
示例表结构:
subscriptions
-------------
id
member_id
update_id
对于每个订阅(点击“接收更新”),您将在“订阅”表中创建一行。
答案 3 :(得分:0)
如果in有意义,联接可以为您提供额外的结果。通常我推荐使用exists运算符,因为它执行与连接相同的操作,但是给出了in的行为。稍后您可以使用不同的操作来保存自己。
$sql_updates = mysql_query("SELECT *
FROM updates a
where exists (select * from members b
WHERE a.member_id b.updates)
ORDER BY a.content_date DESC
LIMIT 10");