【发布时间】:2021-07-14 08:27:02
【问题描述】:
在我的数据库中,我有表wp_postmeta,例如:
| meta_key | meta_value | post_id |
---------------------------------
points | 12 | 23
points | 2 | 18
lorem | ipsum | 92
points | 8 | 15
我想通过meta_value 订购points 并获取特定post_id 的行号。基本上是一个排名系统,最高的数字在顶部。
例如,通过meta_value 订购points:
| meta_key | meta_value | post_id |
---------------------------------
points | 12 | 23
points | 8 | 15
points | 2 | 18
因此,post_id 的值为 15 将是排名 2。
我可以使用什么 SQL 查询来实现这个优化?
到目前为止我尝试过的内容
到目前为止,我已经通过查询实现了这一点:
$query="
SELECT post_id,FIND_IN_SET(
post_id,(SELECT GROUP_CONCAT( post_id ORDER BY meta_value * 1 DESC)
FROM $wpdb->postmeta
WHERE meta_key ='points')
) AS `rank`
FROM $wpdb->postmeta
WHERE meta_key ='points'
AND post_id = '".$post_id."'
";
$result = $wpdb->get_row($query);
$rank = $result->rank;
工作正常。 但是,这个查询很慢。
我怎样才能使这个查询更快?
编辑:这是该表中的索引列表:
【问题讨论】:
-
我到目前为止所尝试的应该是这个平台上的一个标准。 +1
-
这个问题符合条件的时候我会奖励50分。
-
你的MySql是什么版本的?
-
@forpas 最新版本。 MySQL 8.
-
@forpas 你能用我的代码作为参考,用这种方法发布答案吗?