Чтобы объяснить это очень просто, у меня есть следующие пункты:
-------------------------------------------------------------------------------
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
(это уникальный идентификатор объявления, а не основной идентификатор).
Список объявлений составлен на английском языке (язык = 1), и время от времени появляются объявления также на немецком языке (язык = 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');