mysql - 如何在不检查 SQL 中任何字段的情况下只选择一行一次

标签 mysql sql

我有一个名为 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/

相关文章:

mysql - 在 MySQL Workbench 中导出超过 1000 条记录的查询结果

java - 如何跟踪从应用服务器提交到 Oracle 数据库的所有查询?

Sql Server 选择不带秒的日期时间

sql - 在 SQL 查询中包含表名

使用 WAMP 在浏览器中显示为注释的 PHP 代码

mysql - xampp mysql 和 phpmyadmin 不工作

php - 多对多关系标签匹配?

mysql - Rails 3 应用程序 - 将整数保存到数据类型为 int(11) 的列时出现问题

mysql - #1093 - 表 'filtros' 被指定两次,既作为 'UPDATE' 的目标,又作为单独的数据源

SQL 选择前几行的条件