【问题标题】:Problems with simple MySQL join简单 MySQL 连接的问题
【发布时间】:2014-08-04 06:00:26
【问题描述】:

我正在使用表达式引擎和允许您使用 MySQL 获取结果的查询模块。我有一组数据,我试图将其与用户关联。我的查询目前如下:

SELECT COUNT(*) 
FROM exp_channel_grid_field_11 
INNER JOIN exp_member_data 
WHERE `col_id_12` = 'Race' && `member_id` = '1' 

所以,我对加入并不太了解,但我只是在寻找计数。谢谢。

【问题讨论】:

  • 在您的查询中缺少 on 子句。能否展示一下表格结构,以便我们了解表格必须如何连接?
  • 您确定需要加入吗?可能你只是想做SELECT COUNT(*) FROM exp_channel_grid_field_11 WHERE col_id_12 = 'Race' and member_id = '1'
  • @Jens:在 MySQL 中,on 子句是可选的。没有onjoin 是其他数据库所称的cross join,或完整的笛卡尔积。

标签: mysql expressionengine


【解决方案1】:

不确定你在追求什么 - 你 don't necessarily need an 'ON' to do a JOIN 但也许你确实需要定义表格。我不知道哪些列属于哪些表(mysql也不知道,也许这就是问题所在)
假设“member_id”在 exp_member_data 中,“col_id_12”在 exp_channel_grid_field_11 中,您可能需要执行以下操作:

SELECT COUNT(*)
 FROM exp_channel_grid_field_11
 INNER JOIN exp_member_data
 WHERE `exp_channel_grid_field_11.col_id_12` = 'Race'
 && `exp_member_data.member_id` = '1'  

您可以使用“表别名”来“美化”,例如:

SELECT COUNT(*)
 FROM exp_channel_grid_field_11 e11
 INNER JOIN exp_member_data ed
 WHERE `e11.col_id_12` = 'Race'
 AND `ed.member_id` = '1'   

或者,也许应该有一个'ON' member_id?

SELECT COUNT(*)
 FROM exp_channel_grid_field_11 e11
 INNER JOIN exp_member_data ed  
 ON e11.member_id = ed.member_id  
 WHERE `e11.col_id_12` = 'Race'
 AND `ed.member_id` = '1' 

【讨论】:

  • 这不是真的。您确实需要 ON 子句来指定必须在哪个列上进行 JOIN 除非您正在执行 natural join
  • 我认为这是一个更好的答案,展示了编写正确语法的好方法。
  • 您编写的查询确实将正确的列与正确的表相匹配,但我在“where 子句”中收到一条错误消息,即 Unknown column 'exp_channel_grid_field_11.col_id_12'。感谢您对此的帮助。
【解决方案2】:

代替WHERE col_id_12 = 'Race',使用:on col_id_12 = 'Race'

 SELECT COUNT(*) 
 FROM exp_channel_grid_field_11 
 INNER JOIN exp_member_data ON `col_id_12` = 'Race' 
 WHERE `member_id` = '1'

【讨论】:

  • 感谢您的回答。我知道会员 id 1 有 5 场比赛,但是当我将 id 更改为其他会员时,它仍然显示 5 而不是会员数量,所以不幸的是我认为它没有获得 members_id
猜你喜欢
  • 1970-01-01
  • 2013-10-22
  • 1970-01-01
  • 2010-09-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-20
相关资源
最近更新 更多