繁体   English   中英

mysql group by,字段查询

[英]mysql group by, field query

为了用非常简单的方式解释它,我有以下内容:

-------------------------------------------------------------------------------
id  Title                              unique_id  type  language  category       
-------------------------------------------------------------------------------
1   Announcement One                        111     1   1         5,6,8
2   Announcement Two                        112     1   1         6
3   Announcement Three                      113     1   1         7
4   Ankundigung Drei                        113     1   2         7,3
5   Announcement Four                       115     1   1         6
6   Announcement of another type            116     2   1         5
7   Another announcement of another type    117     2   1         7
8   Ein anderes ankundigung                 117     2   2         7
9   Subtype 3                               118     3   1         4
10  Tip 3                                   118     3   2         4
-------------------------------------------------------------------------------

此处的关键字段是unique_id (这是唯一的公告ID,而不是主要ID)。

公告列表是英文的(Language = 1),偶尔也有德语的公告ALSO(Language = 2)-与unique_id 113,117和118一样。

我要做的是英语用户看到公告的英语版本,而德语用户也看到公告的英语版本,因为德语也是默认的英语用户。 但是,仅在公告还存在德语版本的情况下,才应以德语而非英语为德国用户显示该版本。

我以为我可以用一个简单的GROUP BY unique_id和语言(asc或desc)来实现这一点,但这会引发非常不可预测的结果,并且显然行不通。

另外,我想按指定的类别对结果进行排序,例如使用: field (category,7、6、2),然后其余类别按升序进行排序。 对于类别,如果可能的话,我要使用包含,因为一个公告可能包含多个类别,在这种情况下,我认为必须使用包含进行排序。 因此,德语用户应该看到以下结果:

-------------------------------------------------------------------------------
id  Title                              unique_id  type  language  category       
-------------------------------------------------------------------------------
1   Ankundigung Drei                        113     1   2         7,3
2   Ein anderes ankundigung                 117     2   2         7
3   Announcement One                        111     1   1         5,6,8
4   Announcement Two                        112     1   1         6
5   Announcement Four                       115     1   1         6
6   Tip 3                                   118     3   2         4
7   Announcement of another type            116     2   1         5
-------------------------------------------------------------------------------

这是我第一次发布有关stackoverflow的问题,希望我发布了一个不错的问题:)

提前致谢

下面的完整SQL:

-- Table structure for table `anns`
--

CREATE TABLE IF NOT EXISTS `anns` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `title` varchar(254) NOT NULL,
  `unique_id` int(11) NOT NULL,
  `type` int(11) NOT NULL,
  `language` int(11) NOT NULL,
  `category` varchar(254) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=11 ;

--
-- Dumping data for table `anns`
--

INSERT INTO `anns` (`id`, `title`, `unique_id`, `type`, `language`, `category`) VALUES
(1, 'Announcement One', 111, 1, 1, '2,6,8'),
(2, 'Announcement Two', 112, 1, 1, '6'),
(3, 'Announcement Three', 113, 1, 1, '7'),
(4, 'Ankundigung Drei', 113, 1, 2, '7'),
(5, 'Announcement Five', 115, 1, 1, '6'),
(6, 'Announcement of another type', 116, 2, 1, '6'),
(7, 'Another announcement of another type', 117, 2, 1, '7'),
(8, 'Ein anderes ankundigung', 117, 2, 2, '7'),
(9, 'Subtype 3', 118, 3, 1, '4'),
(10, 'Tip 3', 118, 3, 2, '4');   
( SELECT Title,unique_id,type,language,category
    FROM anns 
    WHERE language=2
  UNION
  SELECT Title,unique_id,type,language,category
    FROM anns a 
    WHERE language=1 
      AND NOT EXISTS( SELECT 1 FROM anns a2 
                      WHERE a2.unique_id=a.unique_id 
                        AND a2.language=2 )
) ORDER BY 2

选择没有德语元素的德语元素和英语元素。

这可能有助于检索德语用户的结果:

SELECT *
FROM (
    SELECT * 
    FROM  `anns` 
    ORDER BY  `announcement_id` ,  `language` DESC
) `TA`
GROUP BY `TA`.`announcement_id`;

我尚未添加基于类别的排序,因为我不确定行为。 但是也许您可以尝试将ORDER BY放在GROUP BY之后,例如:

ORDER BY `TA`.`category` DESC"

希望能帮助到你!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM