我有一个脚本,成员登录并阅读我所拥有的catagory的帖子 表称为posts,然后单击一个按钮并将一个条目插入表中 名为postsread收集postname,他们的memberid和显示的日期 他们已经读过它了。我正在寻找的是一个查询 只向他们显示他们尚未阅读的帖子。
**Tables** **Fields** posts id, name, date, from, topic, info, cat postsread id, postname, memberid, date users id, memberid, pass, fname, lname, email
Sessions已经持有他们的$ _SESSION ['memberid'],但我不确定如何 在两个表之间进行查询以获得我正在寻找的内容。 这将是:显示帖子中的所有帖子,除了Postsread中的成员 memberid旁边的相应postname。 我使用的是php 5.3版和mysql 5.0.96。
我使用以下内容显示数据库中的帖子:
$sql=mysql_query("SELECT * FROM posts WHERE cat='1' ORDER BY date DESC");
但这并不能区分成员是否点击了他们的说法 看到他们了还是没有。
我看了很多地方,看到的例子很接近但却无法获得 适合我需要的。我不完全明白如何写这个。我试了很多 没有成功。如果您需要额外的描述,请询问。谢谢你的时间。
答案 0 :(得分:1)
您需要针对JOIN
表构建posts_read
条件,或使用IN
子句排除它们。您应该非常小心索引,因为这些类型的查询可能会非常缓慢,并且数据库密集,并且包含非常重要的数据。
SELECT * FROM posts WHERE cat=:cat AND name NOT IN (SELECT postname FROM postsread WHERE memberid=:memberid)
此处:cat
和:memberid
是适当值的占位符。使用PDO,您可以直接绑定到使用execute
函数的那些。
请注意,加入字符串比加入id
类型值要慢得多。您可能希望改为从postsread
制作id
表格引用posts
。
答案 1 :(得分:0)
sql=mysql_query("SELECT * FROM posts WHERE cat='1' AND name NOT IN (SELECT postname FROM postsread WHERE memberid='$memberid') ORDER BY date DESC") or die (mysql_error());