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 - 自定义循环SQL查询(和热门帖子示例)

PHP 替换默认的WordPress“W”带有自定义替代方案的管理标题中的徽标

PHP 如何替换默认的WordPress“W”?带有自定义替代方案的管理标题中的徽标

wordpress 搜索表单 sql 查询