我有一个名为 tblMessages 的表,其中有一个名为 Type 的字段。对于用户消息,type 值可以为 1,对于一般消息,可以为 2。 在选择用户消息时我编写了这个sql函数:
SELECT * FROM tblMessage WHERE USERID=$Userid and Type=1 and ISseen=0;
然后在另一个 SQL 代码中我更新了该行并为特定用户设置 ISseen=1
UPDATE tblMessage SET ISseen=1 Where USERID=$userid;
但是在选择常规消息时我遇到了一个小问题。我想为所有用户选择常规消息并显示一次!正如我之前所说,我可以更新 tblmessage 并设置 ISseen=1 那么如果 ISseen 的值为 1下次不会选择用户消息。但是对于一般消息的选择,我无法使用 WHERE USERID=$userid
来执行此操作。
我不想也为表中的每个用户插入一般消息。然后
如何通过我的表结构为用户选择一次常规消息?
*****////*****
编辑编号 1
我的tblmessage有20000条记录,只有10条一般消息。在我的网站中,当用户登录他/她的帐户并转到他/她的消息时,可以看到个人消息和一般消息。当用户到达该页面时,我更新了tblmessage 表并设置 ISseen==1 然后,当该用户注销然后返回到网站和他/她的用户页面时,个人消息没有再次显示!因为字段 ISseen=1。但以另一种方式,一般消息一次又一次地显示。原因是什么?原因我没有任何 ISseen 字段用于一般消息。 我的问题是我可以用我的表格的解释做什么。我怎样才能对一般消息做同样的事情。
最佳答案
创建另一个表 messageTable,如下所示。
ID -- 消息
1 -- 用户消息
2 -- 一般消息
现在您可以应用 join 代表类型 获取消息。
您的查询将如下所示。
SELECT messageTable.*,tblMessage.* FROM tblMessage,messageTable WHERE tblMessage.USERID=$Userid and tblMessage.Type=1 and tblMessage.ISseen=0 and tblMessage.Type=messageTable.ID;
关于mysql - 如何在不检查 SQL 中任何字段的情况下只选择一行一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26798238/