我正在为我的网站制作产品数据库。我目前有:
产品表:产品 ID、产品名称、价格
Product_meta 表:Pmeta_id、产品 ID、metaKey、metaValue
我基本上想要它,所以我可以通过指定元键来查询产品,然后给它放一个 key=>value 对,或者通过键获取值。
我相信 Wordpress 有类似的方法,但不太确定如何制作函数来获取数据。我认为它将涉及表连接???
任何帮助,将不胜感激。
我正在为我的网站制作产品数据库。我目前有:
产品表:产品 ID、产品名称、价格
Product_meta 表:Pmeta_id、产品 ID、metaKey、metaValue
我基本上想要它,所以我可以通过指定元键来查询产品,然后给它放一个 key=>value 对,或者通过键获取值。
我相信 Wordpress 有类似的方法,但不太确定如何制作函数来获取数据。我认为它将涉及表连接???
任何帮助,将不胜感激。
SELECT * FROM Product_meta AS M
LEFT OUTER JOIN Products AS P ON ( P.Product_ID = M.Product_ID )
WHERE M.metaKey = ...
或者如果 Products 表领先,则将其翻转:
SELECT * FROM Products AS P
LEFT OUTER JOIN Product_meta AS M ON ( P.Product_ID = M.Product_ID )
WHERE M.metaKey = ...
您也可以更改LEFT OUTER JOIN
为INNER JOIN
只显示 Products 表和 Product_meta 表中的记录
如果您想在子句中有多个值,请WHERE
使用以下查询:
... WHERE M.metaKey IN (..,..,..)
确保您的数据以逗号分隔
它会影响JOIN
,但更重要的是,您需要旋转所有行,以便将这些元键作为列而不是行。就像是:
SELECT
p.productid,
p.productname,
p.price,
MAX(CASE WHEN m.metaname = 'Type' THEN pm.metavalue END) AS 'Type',
MAX(CASE WHEN m.metaname = 'Size' THEN pm.metavalue END) AS 'Size',
MAX(CASE WHEN m.metaname = 'Quantity' THEN pm.metavalue END) AS 'Quantity'
FROM products p
INNER JOIN product_meta pm ON p.productID = pm.productid
INNER JOIN metakeys m ON pm.metakey = m.metakey
GROUP BY p.productid,
p.productname,
p.price;
您也可以为您拥有的所有键动态地执行此操作,而不是手动编写它们:
SET @sql = NULL;
SELECT
GROUP_CONCAT(DISTINCT CONCAT('MAX(IF(m.metaName = ''',
m.metaName, ''', pm.metavalue, NULL)) AS ',
m.metaName )
) INTO @sql
FROM products p
INNER JOIN product_meta pm ON p.productID = pm.productid
INNER JOIN metakeys m ON pm.metakey = m.metakey
;
SET @sql = CONCAT('SELECT p.productid, p.productname,',
'p.price, ', @sql,
' FROM products p ',
' INNER JOIN product_meta pm ON p.productID = pm.productid ',
' INNER JOIN metakeys m ON pm.metakey = m.metakey ',
' GROUP BY p.productid, p.productname, p.price; ');
PREPARE stmt
FROM @sql;
EXECUTE stmt;