【发布时间】:2012-01-31 15:33:30
【问题描述】:
用非常简单的术语来解释它,我有以下几点:
-------------------------------------------------------------------------------
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),偶尔也有德语公告 (Language=2) - 与 unique_id 113,117 和 118 一样。
我想做的是英文用户可以看到英文版的公告,德文用户也可以看到英文版的公告,因为德语用户默认也是英文的。但是,只有在公告还有德语版本的情况下,该版本才应该以德语而不是英语向德国用户显示。
我认为我可以通过简单的GROUP BY unique_id 和语言(asc 或 desc)来实现这一点,但这会引发非常不可预测的结果,并且显然无法正常工作。
另外,我想按指定的类别对结果进行排序,例如:field (category, 7,6,2) 然后其余类别按升序排序。对于类别,如果可能,我想使用 contains,因为一个公告可能有多个类别,在这种情况下,我认为必须使用 contains 进行排序。因此,德国用户应该会看到以下结果:
-------------------------------------------------------------------------------
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声明是什么? -
我还没有,这是我正在实施的新功能。我一直在尝试各种版本,但它们都没有为我提供所需的结果。我正在考虑的最后一个选项是通过 PHP 实现它,但我假设必须有一种方法可以直接通过 MySQL 完成。
-
为什么,为什么
category列中有多个值?
标签: php mysql group-by sql-order-by