如何设置 MySQL 查询?
Posted
技术标签:
【中文标题】如何设置 MySQL 查询?【英文标题】:How to set up MySQL query? 【发布时间】:2013-08-10 15:48:00 【问题描述】:如何设置此查询? 我在一张桌子上有奖。 例如,奖品表中的奖品可能是award_id 1。一条丝带在奖励表中可能是award_id 2。 然后我有另一个表,award_user,它有用户的用户 ID 和用户 ID。所以,如果我想给用户award_id 1,而他们的userid 是25,它将在award_user 表中作为award_id 1 和userid 25(这意味着他们有这个奖励)。我想根据用户 ID 选择用户获得的所有奖项。
不过,事情就是这样。奖励在奖励表中,但有关奖励的实际用户信息在奖励表中。所以,我想我将不得不从两个不同的地方进行选择。
这是我目前所拥有的......
$query = mysql_query("SELECT * from award WHERE Award_id = (SELECT Award_id FROM Award_user WHERE userid = $userid)");
不确定这是否可行。
基本上,它必须从带有用户ID 的award_id 的奖励表中选择奖励。 $userid 是一个有效的变量,它是他们的用户 ID。
谢谢!
【问题讨论】:
您只是(可能)需要一个简单的加入。显示您的表结构,有人可以根据表共享列关系向您展示如何加入 【参考方案1】:您表达查询的方式应该可以工作,只需稍加调整即可。你需要把=
改成in
,因为知道的可能不止一个
SELECT *
from award a
WHERE a.award_id in (SELECT au.award_id FROM award_user au WHERE au.userid = $userid)
更典型地,这将表示为一个连接:
select a.*
from award a join
award_user au
on a.award_id = au.award_id
where au.userid = $userid;
join
表单通常也更有效。
【讨论】:
我正在尝试使用 in 的第一个查询。这是我修改它的方法。 SELECT * from Award, Award_user WHERE Award_id in (SELECT Award_id FROM Award_user WHERE userid = $userid) 但是,测试它用 phpMyAdmin 中的数字 1 替换 $userid,我得到 #1052 - IN/ALL/ANY 中的列 'award_id'子查询不明确 您的 from 子句有from award, award_user
。这会产生一个叉积并导致问题。歧义是声明的award_id in
部分。
SELECT * from award WHERE Award_id in (SELECT Award_id FROM Award_user WHERE userid = $userid) 这行得通。但是,我需要从“award_user”表中选择一个名为“issue_id”的列,这就是我尝试从这两个表中选择 * 的原因。
@alfredo 。 . .然后使用第二个查询并将au.issue_id
添加到select
子句中。您不能从 where
子句中引用的表中提取其他列。
@alfredo 。 . .有一个类型(aw
而不是au
作为表别名)。【参考方案2】:
你需要的是join:
SELECT awards.* FROM awards
JOIN award_user USING (award_id)
WHERE userid = :userid
顺便说一句,学习how joins work 是您真正需要做的一件事,以便正确使用 SQL。它们是关系数据库的全部内容。如果您使用的是 SQL 数据库但不使用连接,这有点像,比如说,拥有一台花哨的新计算机,但只使用它在记事本中读写文本。
【讨论】:
以上是关于如何设置 MySQL 查询?的主要内容,如果未能解决你的问题,请参考以下文章
mysql 千万级数据库如何进行多张结构相同的表联合查询?如何优化或设置提高查询速度?
《MySQL系列-InnoDB引擎15》慢查询日志拓展-如何开启MySQL慢查询日志?