Mysql左连接旋转90°;桌子
我正在尝试创建一个select语句并使用虚拟列,它基于一个具有键值系统的不同表 假设我为所有名为Mysql左连接旋转90°;桌子,mysql,sql,Mysql,Sql,我正在尝试创建一个select语句并使用虚拟列,它基于一个具有键值系统的不同表 假设我为所有名为media 媒体是这样的: id | cust_id | filename | hidden 55 2 lorem.jpg 0 但有些客户需要额外的行,因此我有第二个表,其中包含: media_id | cust_id | rowname | value 55 2 author John Doe 55 2 r
media
媒体是这样的:
id | cust_id | filename | hidden
55 2 lorem.jpg 0
但有些客户需要额外的行,因此我有第二个表,其中包含:
media_id | cust_id | rowname | value
55 2 author John Doe
55 2 release 2015-10-10
55 2 price 42
我想重新创建一个表,在其中可以搜索这些虚拟值
像
这怎么可能?我是否缺少了一些方便的替代方法,可以为不同的用户使用一个公共主表来创建不同的行
我希望避免将JSON数据存储在一列中,因为在sql中很难选择数据,但这是我目前唯一的解决方案(在app/web中选择所有行并解析行)Magic Join!我喜欢它。MySQL的下一版本必须具备此功能。:-) 同时,你要做的是
SELECT m.id,
m.cust_id,
a.value AS author,
r.value AS release,
p.value AS price,
m.filename,
m.hidden
FROM media m
LEFT JOIN other_table a ON m.id = a.id AND a.rowname = 'author'
LEFT JOIN other_table p ON m.id = p.id AND p.rowname = 'price'
LEFT JOIN other_table r ON m.id = r.id AND r.rowname = 'release'
对other_表
(您可以称之为attributes
表或metadata
表)中的每个不同属性使用左联接,即使在某些原始行没有某些元数据项的情况下,也可以使查询工作
然后,如果需要对其中一些项进行筛选或排序,可以将此查询包装在外部查询中。比如说
SELECT *
FROM (
SELECT m.id,
m.cust_id,
a.value AS author,
r.value AS release,
p.value AS price,
m.filename,
m.hidden
FROM media m
LEFT JOIN other_table a ON m.id = a.id AND a.rowname = 'author'
LEFT JOIN other_table p ON m.id = p.id AND p.rowname = 'price'
LEFT JOIN other_table r ON m.id = r.id AND r.rowname = 'release'
) all
WHERE release >= '2010-01-01'
ORDER BY author
值得一提的是,WordPress使用此策略在其
wp\u Posteta
表中存储任意信息。如果wp使用此策略,那么我可能对相同的元数据存储系统是正确的!谢谢你的信息
SELECT *
FROM (
SELECT m.id,
m.cust_id,
a.value AS author,
r.value AS release,
p.value AS price,
m.filename,
m.hidden
FROM media m
LEFT JOIN other_table a ON m.id = a.id AND a.rowname = 'author'
LEFT JOIN other_table p ON m.id = p.id AND p.rowname = 'price'
LEFT JOIN other_table r ON m.id = r.id AND r.rowname = 'release'
) all
WHERE release >= '2010-01-01'
ORDER BY author