PHP 中的 SQL 查询(WordPress)
Posted
技术标签:
【中文标题】PHP 中的 SQL 查询(WordPress)【英文标题】:SQL query in PHP ( WordPress ) 【发布时间】:2020-12-23 09:05:06 【问题描述】:我需要有关 php (WordPress) 中的 SQL 查询的帮助。 我有这些数据:
| id | kw_id | date | position
| 1 | 1 | 2020.08.23 | 16 |
| 2 | 1 | 2020.10.02 | 17 |
| 3 | 2 | 2020.10.08 | 5 |
| 4 | 2 | 2020.10.08 | 6 |
我需要两行( id=2, id=3 )。 查询条件为二:
-
获取最大日期的行
按 kw_id 分组
当日期重复( id=3 和 id=4 )时,获取最小位置的行。
结果必须如下:
id | kw_id | date | position
2 | 1 | 2020.10.02 | 17
3 | 2 | 2020.10.08 | 5
提前致谢。
【问题讨论】:
【参考方案1】:对于旧版 mysql 5.*,它可能有点复杂。下面的查询返回针 id 的:
select min(id) as min_id
from tbl
join (
select kw_id, max(date) max_date
from tbl
group by kw_id
) tbl1 on tbl1.max_date = tbl.date and tbl1.kw_id = tbl.kw_id
group by tbl.kw_id;
结果:
+========+
| min_id |
+========+
| 2 |
+--------+
| 3 |
+--------+
现在是最终查询:
select * from tbl where id in (
select min(id) as min_id
from tbl
join (
select kw_id, max(date) max_date
from tbl
group by kw_id
) tbl1 on tbl1.max_date = tbl.date and tbl1.kw_id = tbl.kw_id
group by tbl.kw_id
);
最终结果:
+====+=======+============+==========+
| id | kw_id | date | position |
+====+=======+============+==========+
| 2 | 1 | 2020-10-02 | 17 |
+----+-------+------------+----------+
| 3 | 2 | 2020-10-08 | 5 |
+----+-------+------------+----------+
这里是live SQL fiddle
【讨论】:
【参考方案2】:如果您使用的是 MySQL 8+,那么ROW_NUMBER
提供了一种选择:
WITH cte AS (
SELECT *, ROW_NUMBER() OVER (PARTITION BY id ORDER BY date DESC, position) rn
FROM yourTable
)
SELECT id, kw_id, date, position
FROM cte
WHERE rn = 1;
上述对ROW_NUMBER
的调用将每个id
的最新日期放在首位,如果日期相同,则将最小的位置放在首位。
【讨论】:
以上是关于PHP 中的 SQL 查询(WordPress)的主要内容,如果未能解决你的问题,请参考以下文章
PHP Wordpress,替换默认的WordPress“W”仪表板中的徽标
PHP Wordpress - 自定义循环SQL查询(和热门帖子示例)
PHP 替换默认的WordPress“W”带有自定义替代方案的管理标题中的徽标