我为这样一个含糊的标题道歉。
背景
我有一个包含Wordpress博客文章的MySQL表。该表包含帖子及其翻译,例如:
----------------------------------------------------
|post_name|post_type|post_status|post_date |
----------------------------------------------------
|My post | post | publish |2019-05-18 05:00:20 |
----------------------------------------------------
| Mi post | post | publish |2019-05-18 05:00:20 |
----------------------------------------------------
每个帖子和每个翻译都是表中独立的帖子条目。我正在尝试组合一个SQL语句,它将给我一个帖子及其翻译名称的列表。翻译之间唯一的共同点是帖子有完全相同的日期。
当前SQL语句
到目前为止,我写道:
SELECT t1.post_name, t2.post_name, t1.post_date
FROM `posts` t1 LEFT JOIN `posts` t2 ON t1.post_date = t2.post_date
WHERE t1.post_status='publish' and
t1.post_type='post' and
t1.post_name<>t2.post_name
ORDER BY t1.post_date DESC
输出
-----------------------------------------
|post_name|post_name| post_date |
-----------------------------------------
|My post | Mi post | 2019-05-18 05:00:20 |
-----------------------------------------
| Mi post | My post | 2019-05-18 05:00:20 |
-----------------------------------------
正如您所看到的,我得到了两次条目(这是相当符合逻辑的)。那么,怎样才能去掉重复的条目呢?
谢谢
发布于 2019-05-25 23:33:16
您可以使用t1.post_name < t2.post_name
而不是t1.post_name <> t2.post_name
来仅获取其中的一个对。然而,这并不一定会给你提供一种语言和另一种语言。你需要一些措施来检测语言才能得到它。
还要注意,t1
和t2
中的列的比较会悄悄地将LEFT JOIN
有效地更改为INNER JOIN
,因此显式地这样写会更清楚。
SELECT t1.post_name,
t2.post_name,
t1.post_date
FROM `posts` t1
INNER JOIN `posts` t2
ON t1.post_date = t2.post_date
WHERE t1.post_status = 'publish'
AND t1.post_type = 'post'
AND t1.post_name < t2.post_name
ORDER BY t1.post_date DESC;
发布于 2019-05-26 00:16:04
我有一个建议,你可以为你的帖子添加类别,如每种语言的英语,法语。通过这种方式,您可以轻松地对帖子进行分组。我添加了DATE_FORMAT,以使每个帖子的日期与另一个帖子的日期完全匹配(如果日期和时间完全相同,则可以省略此选项)。我又添加了两个左连接,以检查类别(语言)是否不同。这样,查询将给出正确的结果。则该查询将变为
SELECT t1.post_name, t2.post_name, t1.post_date, tr1.term_taxonomy_id, tr2.term_taxonomy_id
FROM `posts` t1 LEFT JOIN `posts` t2 ON date_format(t1.post_date, "%Y-%m-%d") = date_format(t2.post_date, "%Y-%m-%d") left join `term_relationships` tr1 on t1.ID=tr1.object_id left join `term_relationships` tr2 on t2.ID=tr2.object_id
WHERE t1.post_status='publish' and
t1.post_type='post' and
t2.post_type='post' AND
t2.post_status='publish' AND
t1.post_name<>t2.post_name
ORDER BY t1.post_date DESC
https://stackoverflow.com/questions/56306058
复制相似问题