Доброго времени суток! Есть поле pages, туда помещаются данные в виде "33, 40, 39" у каждой строки в pages количество может быть любое и значения могут повторяться, то есть строка1 pages = "33, 40, 39" строка2 pages = "47, 34" строка3 pages = "33, 42, 38, 34" ... мне нужно выбрать 5 последних неповторяющихся строк по 5 значениям то есть с значением 40 с значением 47 с значением 33 с значением 37 с значением 57 сложно объяснить точнее WHERE (pages LIKE '%"40"%' OR pages LIKE '%"47"%' OR pages LIKE '%"33"%' OR pages LIKE '%"37"%' OR pages LIKE '%"57"%') GROUP BY id ORDER BY date DESC LIMIT 0,5 подобный запрос выведет 5 строк, но в них не будет всех нужных 5 значений (как в примере выше) как это можно реализовать?
придумал только сделать 5 запросов типа WHERE (pages LIKE "%40%" AND pages NOT LIKE "%33%" ...) и так по каждому запросу может можно красиво в один запрос объединить?
Например, хочу чтобы у сообщения были теги. 1. таблица тегов 2. таблица сообщений 3. таблица где номер сообщения и номер тега
а в таблице сообщений будет поле тегов? я хочу логику понять, смысл то все равно тот же? у каждого сообщения может быть произвольный набор тегов? и как выбрать тогда 5 разных сообщений по 5 тегам?
я думаю все-таки задача не совсем тривиальная нужно выбрать 5 разных материалов по 5 разным тегам в одном запросе, так реально вообще? ну чтобы материалы не повторялись это легко, но вот чтобы материалов было 5 и каждый под нужный тег? Добавлено спустя 3 минуты 2 секунды: denis01, да, я уже понял смысл но мой вопрос это не решает хоть с LIKE, хоть с нормальной структурой
разбей задачи на более простые, теги через join сделал? Добавлено спустя 6 минут 45 секунд: Ещё лучше напиши зачем тебе 5 случайных записей, может есть другие решения. Случайные выборки очень много ресурсов потребляют. http://hudson.su/2010/09/16/mysql-optimizaciya-order-by-rand/
сделал через 5 запросов, иначе никак а чем плох LIKE ? если мне нужно искать строки с определенным словом
во-первых, ты не решил задачу. твой лайк '%47%' сработает и на слово '847' и на '99947999'. остальное уже не важно SQL предназначен для работы с множествами, а для обработки текстов. нормальный подход, когда твои слова-теги оформлены как записи в отдельной таблице, по одной записи на каждое "слово".