【问题标题】:Combine database queries组合数据库查询
【发布时间】:2015-11-07 18:57:24
【问题描述】:

我有一个如下所示的 MySQL 表:

ID    / x_id / x_key  / x_value


322  / 4     / 名字  / 杰克

323  / 5     / 名字  / 玛丽

324  / 6     / 姓名  / 约翰

325  / 4     / 隐藏    / 1

326  / 5     / 隐藏    / 0

327  / 6     / 隐藏    / 0


我想从“隐藏”键对应“0”值的人中选择姓名。 在这里,这些选定的“x_values”将是 Mary 和 John

为此,我拥有可以在记录之间进行比较的 x_id。

哪个 x_id 对应于与 x_value = "0" 匹配的 x_key="hide"?

x_id 的 5 和 6。

x_key="name" 的这两个x_id 对应的是哪个“x_values”?玛丽和约翰

换句话说,我尝试获取一个混合这两个查询的查询,以便仅获取 Mary 和 John:

查询 A:

SELECT 
    x_id,
    x_value 
FROM 
    mytable 
WHERE 
    x_key='name' 

查询 B:

SELECT 
    x_id 
FROM 
    mytable 
WHERE 
    x_key='hide' 
AND 
    x_value='0'

我只是没有找到正确的方法来做到这一点。 我该怎么办?

我真的很抱歉解释,但我不是英语,很难解释。

【问题讨论】:

  • 你的桌子结构是什么?
  • id - x_id - x_key - x_value。谢谢
  • x_id is a foreign key ... 到哪个表?
  • 抱歉,我编辑了我的帖子以使事情更清楚。

标签: mysql database join


【解决方案1】:

如果我理解你是正确的,你想选择具有特定 x_keyx_value = '0' 并且未隐藏 (x_key != 'hide') 的元素。

编辑(根据您的编辑):

SQL Fiddle

SELECT bb.x_value
FROM mytable AS aa
INNER JOIN mytable AS bb
ON aa.x_id = bb.x_id
WHERE aa.x_key = 'hide' AND aa.x_value = 0 AND bb.x_key = 'name';

旧答案(在您编辑之前):

SELECT x_id, x_key, x_value
FROM mytable
WHERE x_key='name' AND x_key != 'hide' AND x_value = '0'

【讨论】:

  • 如果您的意思有所不同,请相应地更新您的问题,提供更多信息。
  • 我编辑了这个问题。我希望这一次会更清楚。我真的尽力了。
【解决方案2】:

您应该使用连接来连接表的两个实例 - 一个用于名称,一个用于“隐藏”

select n.x_id, n.x_value from mytable as h inner join myable as n on 
h.x_id = n.x_id where n.x_key = 'name' and h.x_key = 'hide' and H.x_value = 0;

虽然这可行,但我认为在同一个表中包含两种类型的数据并不是一个好习惯。我建议您将其拆分为两张表 - 一张用于名称,一张用于隐藏

【讨论】:

  • 感谢您的帮助。我正在尝试从此表中检索数据,但我不是创建它的人。事实上,这是 Wordpress 的 postmeta 表......这是一个通用表,插件创建者可以利用它而不会弄乱数据库。这并不理想,但它允许插入几乎所有内容(key=> value),而无需更改表结构本身。我会尝试您的查询,并会回复您。谢谢。
【解决方案3】:

如果我理解您是正确的,您希望将 2 个“SELECT”与不同的“WHERE”语句结合起来。您可以使用“或”语句

SELECT x_id,x_value FROM mytable WHERE x_key='name' OR x_key='hide' AND x_value='0'

【讨论】:

  • 不是这样,但还是谢谢你。如果您想了解全部内容,请参阅更新后的问题。
猜你喜欢
  • 2011-05-10
  • 2014-10-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多