我目前拥有此功能,因此我可以在元键“product_info”中显示“未找到产品数据”的产品结果
我当前的查询是这样的 SQL:
SELECT *
FROM `wp_postmeta`
WHERE `meta_key` LIKE 'product_info'
AND `meta_value` LIKE '%Product data not found%'
除此之外,我需要能够按照从最旧到最新的顺序显示它们,并且这些数据可以在meta_key“last_update”中以数字形式找到,如示例所示。
我将如何使用meta_key“last_update”进行用户order by
SQL 结构示例
post_id meta_key meta_value
19248 product_info Product data not found
19248 last_update 1959520849
19249 product_info Product data not found
19249 last_update 1659520849
19250 product_info OK
19250 last_update 1759520849
19251 product_info Product data not found
19251 last_update 1859520849
我希望能达到这个结果
post_id meta_key meta_value
19249 product_info Product data not found
//not visible result 19249 last_update 1659520849
19251 product_info Product data not found
//not visible result 19251 last_update 1859520849
19248 product_info Product data not found
//not visible result 19248 last_update 1959520849
正如我们所看到的,它是从最低的数字开始排序的,仅考虑到他们在product_info“未找到产品数据”中的post_id
不可见的结果=我把它放出来,这样你就可以看到它是按时间排序的
抱歉,如果问题措辞不好,我是 SQL 新手。
您需要再次
JOIN
到wp_postmeta
,寻找相同的post_id
和meta_key
的last_update
。然后您可以 ORDER BY
第二个表中的 meta_value
:
SELECT wp1.*
FROM wp_postmeta wp1
LEFT JOIN wp_postmeta wp2 ON wp2.post_id = wp1.post_id AND wp2.meta_key = 'last_update'
WHERE wp1.meta_key LIKE 'product_info' AND wp1.meta_value LIKE '%Product data not found%'
ORDER BY COALESCE(wp2.meta_value, 0)
样本数据的输出:
post_id meta_key meta_value
19249 product_info Product data not found
19251 product_info Product data not found
19248 product_info Product data not found
请注意,我使用
LEFT JOIN
和 COALESCE
来处理任何没有 last_update
值的帖子。 0
中的COALESCE
值表示这些帖子将首先排序;如果您希望它们排在最后,请使用 COALESCE(wp2.meta_value, 2147483647)
代替。
在这种表结构中累积相关数据的一种非常常见的方法是执行透视。已知列名的数据透视查询使开发和维护查询变得更加容易,因为从聚合数据中提取所需的值后,您可以享受非常简单的访问。
使用 GROUP BY 和筛选聚合数据的好处最初可能看起来需要大量工作,但是当您开始为单个
post_id
堆积多行时,这种方法确实会带来回报。
架构(MySQL v8.0)
CREATE TABLE wp_postmeta (
`post_id` INTEGER,
`meta_key` VARCHAR(50),
`meta_value` VARCHAR(50)
);
INSERT INTO wp_postmeta
(`post_id`, `meta_key`, `meta_value`)
VALUES
('19248', 'product_info', 'Product data not found anywhere'),
('19248', 'last_update', '1959520849'),
('19249', 'product_info', 'This Product data not found'),
('19249', 'last_update', '1659520849'),
('19250', 'product_info', 'OK'),
('19250', 'last_update', '1759520849'),
('19251', 'product_info', 'Product data not found ...yes, I looked'),
('19251', 'last_update', '1859520849');
SELECT post_id,
MAX(CASE meta_key WHEN 'product_info' THEN meta_value END) product_info,
MAX(CASE meta_key WHEN 'last_update' THEN meta_value END) last_update
FROM wp_postmeta
GROUP BY post_id
HAVING MAX(CASE meta_key WHEN 'product_info' THEN meta_value END) LIKE '%Product data not found%'
ORDER BY last_update;
帖子_id | 产品信息 | 最后更新 |
---|---|---|
19249 | 未找到该产品数据 | 1659520849 |
19251 | 未找到产品数据...是的,我查了一下 | 1859520849 |
19248 | 在任何地方都找不到产品数据 | 1959520849 |
我之前就枢轴主题给出的一些相关建议: