PHP PDO正确使用JOINS进行mySQL查询

时间:2013-09-30 11:56:32

标签: php mysql join pdo

如何正确使用JOIN来添加与第二个表中的ID匹配的每一行作为第一个表的列标题。

实施例

主题表

ID     TITLE    DATE    TEXT
1     logo     23101    some sample text
2     back     23101    some sample text

THEME_META

refID     field     value
1         width     300
1         height    190
1         alt       some alternate text
2         bgcolor   #222

MySQL查询将是SELECT * FROM theme WHERE date = ?

然后我会预先得到我的结果并将我的主题项放在一个变量中,我可以用它来回显行中任何列的值。

例如。 echo $theme['title'];

我如何通过JOIN能够回显

$theme['width'] . $theme['height'] . $theme['alt']

1 个答案:

答案 0 :(得分:2)

你要找的是 pivot 每个field的{​​{1}}表中的theme_meta列,不幸的是,MySQL没有数据透视表运算符,但您可以使用refID表达式来执行此操作:

CASE

更新:要动态执行此操作而不是手动列出值,您必须使用动态sql,如下所示:

SELECT
  t.id,
  t.date,
  t.text,
  MAX(CASE WHEN m.field = 'width' THEN m.value ELSE NULL END) AS Width,
  MAX(CASE WHEN m.field = 'height' THEN m.value ELSE NULL END) AS height,
  MAX(CASE WHEN m.field = 'alt' THEN m.value ELSE NULL END) AS alt, 
  MAX(CASE WHEN m.field = 'bgcolor' THEN m.value ELSE NULL END) AS bgcolor,
FROM theme AS t
INNER JOIN theme_meta AS m ON t.id = m.refID
GROUP BY t.id,
  t.date,
  t.text;