mysql如何根据一个字段显示某些行的表并依赖于其他表中的一个字段?

时间:2013-05-13 21:14:32

标签: php mysql phpmyadmin

我有一个脚本,成员登录并阅读我所拥有的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");

但这并不能区分成员是否点击了他们的说法 看到他们了还是没有。

我看了很多地方,看到的例子很接近但却无法获得 适合我需要的。我不完全明白如何写这个。我试了很多 没有成功。如果您需要额外的描述,请询问。谢谢你的时间。

2 个答案:

答案 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());

塔德曼对他的回答是正确的;我在代码中有一些不应该存在的东西,但找不到它。最后我只是改写了这个东西而且它起作用了。上面的内容对我有用,我感谢Tadman的帮助。