首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >从MySQL中选择唯一的数据集

从MySQL中选择唯一的数据集
EN

Stack Overflow用户
提问于 2019-05-25 23:11:05
回答 2查看 37关注 0票数 1

我为这样一个含糊的标题道歉。

背景

我有一个包含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 |
 -----------------------------------------

正如您所看到的,我得到了两次条目(这是相当符合逻辑的)。那么,怎样才能去掉重复的条目呢?

谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-05-25 23:33:16

您可以使用t1.post_name < t2.post_name而不是t1.post_name <> t2.post_name来仅获取其中的一个对。然而,这并不一定会给你提供一种语言和另一种语言。你需要一些措施来检测语言才能得到它。

还要注意,t1t2中的列的比较会悄悄地将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;
票数 1
EN

Stack Overflow用户

发布于 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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56306058

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档