簡體   English   中英

mysql如何根據一個字段和另一個表中的一個字段顯示表的某些行?

[英]mysql how to show some rows of table depending on one field and depending on one field in other table?

我有一個腳本,其中的成員按表中的目錄登錄並按類別讀取日志,然后單擊按鈕,然后將一個條目插入表中稱為postsread的日志中,收集該日志的名稱,成員ID和顯示已被讀取的日期被他們。 我正在尋找的查詢將僅向他們顯示他們尚未閱讀的帖子。

**Tables**         **Fields**
posts          id, name, date, from, topic, info, cat
postsread      id, postname, memberid, date
users          id, memberid, pass, fname, lname, email

會話已經持有他們的$ _SESSION ['memberid'],但是不確定如何在兩個表之間進行查詢以獲取所需的內容。 就像這樣:顯示帖子中的所有帖子,但Postsread中的帖子除外,並在相應的帖子名稱旁邊添加成員memberid。 我正在使用php版本5.3和mysql 5.0.96。

我正在使用以下內容來顯示數據庫中的帖子:

$sql=mysql_query("SELECT * FROM posts WHERE cat='1' ORDER BY date DESC");

但這並不能區分成員是否單擊以表明他們是否看到了它們。

我看過很多地方,看到了一些接近的示例,但都找不到適合我需要的示例。 我不完全了解該如何寫。 我嘗試了許多但沒有成功。 如果您需要其他說明,請詢問。 感謝您的時間。

您需要針對posts_read表構造一個JOIN條件,或使用IN子句將其排除。 您應該非常小心地使用索引,因為這類查詢可能會變得非常緩慢,並且會占用大量的數據,從而占用大量數據庫資源。

SELECT * FROM posts WHERE cat=:cat AND name NOT IN (SELECT postname FROM postsread WHERE memberid=:memberid)

:cat:memberid是適當值的占位符。 使用PDO,您可以直接綁定到使用execute函數的對象。

注意,在字符串上的連接要比在id類型值上的連接慢很多。 您可能希望改為使posts postsread表引用id

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

塔德曼答對了。 我在代碼中有一些本不應該存在的東西,但是找不到它。 最終,我只是改寫了東西,然后它起作用了。 以上為我工作,感謝塔德曼的幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM