如何正确使用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']
答案 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;