Вопрос - Ответ по MySQL

Печать RSS
2868

О

Землянин
0
Ну, конечно нужно.
М

Землянин
0
ramzes, в принципе так должно работать: WHERE `поле` LIKE '%какойто_тег%' - именно с %.
но лучше создать отдельную таблицу.

2000 лет д.н.э.
0
52, да не, в том то и проблема что в переменной не один тег а строка вида 'тег1, тег2, тег3', лайк выдаст только эту же запись ибо только в ней строка совпадет, мне надо как то так что бы запрос по каждому тегу отдельно был и в тоже время не куча запросов циклом, я просто не сталкивался еще с таким, наверняка есть готовое обращение но вот где искать не знаю..
// от отдельной таблицы отказался, очень неудобно выходит..
М

Землянин
0
аа, понял.
ну тогда как минимум два варианта.
первый - разбить твою строку на массив тегов функцией explode() - и в цикле делать запросы. но тогда получается много запросов, а это не очень хорошо.
второй - сделать ну вот как-то так:
$tags = 'тег1,тег2, тег3, тег4,тег5';
echo "SELECT something FROM table WHERE (somethingelse LIKE '%".preg_replace('/[ ]*,[ ]*/', "%' OR somethingelse LIKE '%", $tags)."%')";
посмотри что получится)

2000 лет д.н.э.
0
А пояснить можешь сей код? А то что то незнакомое.
// массив с тегами из строки есть уже делёный, но цикл не вариант, 500 записей и ~ 5 тегов, не очень хорошо выйдет, в два раза медленнее скрипт будет чем без этих тегов
О

Землянин
0
ramzes, не парься ты этим. Сделай по-нормальну, отдельной таблицей, сам потом поймешь что это проще и правильнее

2000 лет д.н.э.
0
Я знаюsmile у меня даже пример есть, но мне не нравится выводить похожие блоги методом вычитывания сначала тегов совпадающих с текущими, потом блогов на которые эти теги ссылаются, тоже не мало запросов выходит (~5), не считая обновления и проверки тегов при редактировании блога.. Вот и ищу другой путь..
М

Землянин
0
реально, отдельной таблицей лучше будет. но код объясню.
вот у тебя есть строка с тегами $tags. теги у тебя через запятую (ну и, может быть, пробелы. в регулярке это учтено).
тебе надо сформировать запрос, в котором будут проверяться теги по одному.
то есть по сути надо несколько LIKE-ов - для каждого тега.
каждый должен быть типа LIKE '%тег%' (% это значит, что может быть что-то до, и что-то после). запрос должен быть типа `что-то` LIKE '%тег%' OR `что-то` LIKE '%еще_тег%' OR `что-то` LIKE '%и_еще_тег%'.
ну вот ты и заменяешь в строке $tags запятые и пробелы, которые между тегами, на то, что должно быть между тегами в запросе - %' OR `что-то` LIKE '% , ну и '% и %' ставишь в начало и в конец. и получается запрос.
вроде понятно)
Изменил: Максим (31.01.2010 / 20:40)

2000 лет д.н.э.
0
Вот это как раз то что надоsmile
отдельная таблица имеет один большой минус, во первых ее наличие как таковой, не оправданно самой функцией (для меня приоритетно), ну а главное, выбираем 5 тегов, выдает нам эти 5 тегов которые с вероятностью %90 ведут на 2 блога в которых совпадение более чем одного тега (они по любому подряд идут, тут конечно можно сортировать по самим тегам но вероятность все равно остается), и получаем 2 блога с повторами 2.5раз. А в случае выборки из таблицы блогов, получим все 5 разных совпадений, я так надеюсьsmile если не прав поправьте.
Попробывать увы только после переезда сайта смогу, пара дней в простое..
М

Землянин
0
ramzes, неа.
допустим (допустим, условно) что у тебя таблица, где соответствия тегов к блогам, в ней 2 столбца - тег, блог.
ты можешь сделать такой запрос, чтобы блоги (ну их id у тебя в таблице) будут без в повторений, уникальными.
просто надо добавить GROUP BY `блог` в конец запроса.
-----
з.ы. если будешь использовать и ORDER BY и GROUP BY - мало ли - GROUP BY должно стоять перед ORDER BY
Стикеры / Теги / Правила / Топ тем / Топ постов / Поиск