【问题标题】:MySQL Subquery Syntax + ZF2 SyntaxMySQL 子查询语法 + ZF2 语法
【发布时间】:2016-05-25 13:57:39
【问题描述】:

我有一个包含 10k+ 行的足球数据库。我的目标是通过他的 id 选择一名球员,并获得所有其他在同一联赛或俱乐部或具有相同国籍的球员。 到目前为止,我的查询如下:

 SELECT * 
 FROM  `characteristics` 
 WHERE `nation` = (SELECT `nation` 
                   FROM `characteristics` 
                   WHERE `id` = "1") 
 OR    `club`   = (SELECT `club` 
                   FROM `characteristics` 
                   WHERE `id` = "1") 
 OR   `league`  = (SELECT `league` 
                   FROM `characteristics` 
                   WHERE `id` = "1")

我认为查询没有按预期工作,因为它将返回 1434 行。例如:Nation = ArgentinaLeague = BBVAClub = FC Barcelona 将一起返回大约 1500 多行的内容。

也许你们可以帮我解决这个子查询。

另一个问题是 ZF2 中的子查询语法。我在 stackoverflow 上找到了一些东西,但我不知道把东西放在哪里的语法。

编辑:数据库数据示例

id  firstname lastname age height nation     club          league
1   Lionel    Messi    28  170 cm Argentina  FC Barcelona  Liga BBVA

【问题讨论】:

  • characteristics是你的玩家桌吗?你能显示一些数据吗?
  • 是的,它是表的名称。数据编辑示例。
  • 你有重复吗?您可以尝试将DISTINCT 添加到您的查询中...

标签: mysql sql select zend-framework2 subquery


【解决方案1】:

我无法回答有关 ZF2 的问题,因为我没有使用它。

对于您的 SQL 问题,我认为您正在寻找这个:

SELECT C1.`id` as playerid, 
       C1.firstname as playerfirstname, 
       C1.lastname as playerlastname, 
       C2.* 
FROM  `characteristics` C1
INNER JOIN `characteristics` C2 
   ON ( C1.`nation` = C2.`nation` OR 
        C1.`club`   = C2.`club`   OR
        C1.`league` = C2.`league` )
WHERE C1.`id` = "1"

这个想法是从characteristics(别名C1)检索播放器,然后在您指定的列上再次加入表characteristics(别名C2)。

【讨论】:

  • 感谢您的回复,但是当我使用您的查询时,我会得到与上面相同数量的行。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-22
  • 1970-01-01
  • 1970-01-01
  • 2011-08-18
  • 1970-01-01
相关资源
最近更新 更多