MySql如果记录存在于选择查询中

问题描述

| 创建一个论坛类型的站点,我有3个表,一个表用于存储用户信息(用户),一个表用于原始帖子(线程),一个表用于类似SO的升级系统(投票)。 投票表包含3列,即id,userid和threadid。用户对主题进行投票时,会将记录插入投票表。当我查询线程时,我想知道用户是否对此进行了投票,实质上是在表决表中是否存在具有正确的userid和threadid的记录。我可以在两个查询中执行此操作,但是我认为必须有一种方法可以将所有内容合而为一。 我的查询当前:
\"SELECT t.id,t.title,t.content u.id AS uid,u.username 
FROM threads t,users u 
WHERE t.id = \'\".$userid.\"\' 
AND t.author = \'\".$userid.\"\'\"
如果您需要更好的主意,则仅当用户投票时,以下内容才会查询所需的结果。如果表决表中的记录不存在,我需要查询仍然返回(可能将表决值返回为null?)。
\"SELECT t.id,t.content u.id 
AS uid,u.username v.id 
FROM threads t,users u,votes v 
WHERE t.id = \'\".$threadid.\"\' 
AND t.author = \'\".$userid.\"\' 
AND v.threadid = t.id 
AND v.userid = \'\".$userid.\"\'\"
我还自学(并且仍在学习)mysql和数据库设计,因此,如果有更好的方法/方法(如连接表),请告诉我。谢谢。     

解决方法

您的第二个查询正在执行内部联接,该联接仅返回出现在联接两侧的记录。您想在表决表上进行左/右外部联接,这样即使没有匹配的表决记录,您仍然可以获得用户+线程记录。
SELECT t.id,t.title,t.content,u.id,u.username,v.id
FROM threads AS t
INNER JOIN users AS u ON t.userid = u.id
LEFT JOIN votes AS v ON (v.userid = u.id and t.id = v.threadid)
WHERE (u.id = $userid) AND (t.id = $threadid)
只是猜测一下,但足以让您入门。     

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...