MySQL多选?

时间:2014-06-19 15:10:25

标签: mysql select

我有两张桌子。

首先是文章:     ID | title 和价值观: 1 | title1 | content 1 2 | title2 | content 2 3 | title 3 | content 3

和第二个属性: artID | attrib | value 和价值观: 1 | date | 2014-06-15 1 | visible | true 1 | featured | false 2 | date | 2010-03-02 2 | visible | fals 2 | featured | true 3 | date | 2012-04-02 3 | visible | true 3 | featured | true

(我试着逐行显示它们,但编辑在这里疯了)。

artID是第一张表的ID。

我试着得到这样的结果:

ID | title | date value | featured value | only WHERE visible = "true"

我的尝试:

SELECT articles.ID, articles.title, attributes.artID, attributes.attrib, attributes.value
FROM articles
INNER JOIN attributes
ON articles.ID = attributes.artID
WHERE attributes.attrib=visible AND attributes.value=true

所以现在我有:

ID | title | (attributes.artID) | (attributes.fieldID) | (attributes.value) | only WHERE visible = "true"

(我在最终数组中不需要括号中的字段)

问题是:

如何在同一查询中获取“日期”和“特色”值(或其他方式?)

4 个答案:

答案 0 :(得分:0)

我遗漏了att1.artID,它是重复的。

SELECT articles.ID, articles.title, att1.attrib, att1.value, att2.date, att2.featured
FROM articles
INNER JOIN attributes AS att1
ON articles.ID = att1.artID
LEFT JOIN attributes AS att2
ON articles.ID = att2.artID
WHERE att1.attrib=visible AND att1.value=true

答案 1 :(得分:0)

Select * from articles where articles.ID IN (Select artID from attributes where attrib='visible' and value='true')

MySQL中的IN子句允许您指定ID列表。假设ID 1,2,3可见。这相当于说

Select * from articles where ID='1' OR ID='2' OR ID='3'

但它会动态生成列表。你的连接不起作用的原因是因为它不会附加连接中的所有属性,而是会选择最后一个属性并追加它,所以你会得到类似的东西:

ID | Title | Attrib | Value

ID | Title | Date | Visible | Etc

您需要更改选择部分以适合您想要选择的内容,但使用IN关键字获取可见记录是一种快速简便的解决方案。

答案 2 :(得分:0)

试试:

  select id , date , featured, visible from (
  SELECT articles.ID, max(case when attrib = 'date' then value end) as 'date'
   ,max(case when attrib = 'featured' then value end) as 'featured' ,
    max(case when attrib = 'visible' then value end) as 'visible'
  FROM articles
  INNER JOIN attributes
  ON articles.ID = attributes.artID

  GROUP BY articles.ID
   )t
  WHERE  t.visible ='true'

答案 3 :(得分:0)

您可以通过为3个属性加入属性表3时间来实现此目的 {{3H2>