За последние 24 часа нас посетили 16877 программистов и 1646 роботов. Сейчас ищут 963 программиста ...

LIKE .. OR LIKE сортировка чем больше найдено

Тема в разделе "MySQL", создана пользователем VLK, 14 дек 2014.

  1. VLK

    VLK Старожил

    С нами с:
    15 дек 2013
    Сообщения:
    3.010
    Симпатии:
    58
    Тема берет своё начало тут - viewtopic.php?f=20&t=51139&p=407154

    Вообще что я делаю, есть записи у них есть теги и мне надо организовать поиск по тегам, записей много.

    изначально я использовал принцип из WP, т.е. 3 таблицы, первая записи (post_id, post_text), вторая теги (tag_id, tag_name) и третья собственно связи между записями и тегами (rs_id, post_id, tag_id), но у данного поиска свои недостатки, я решил изменить архитектуру и оставить 2 таблицы первая записи, в нее мы добавляем теги (post_id, post_text, post_ tags) и вторая (tag_id, tag_name) и собственно запись выглядит так:

    post_id 1
    post_text '.....'
    post_ tags '"1", "5", "100", "12", "33"'

    В post_ tags идут через запятую tag_id и они берутся в кавычки для более точного поиска (LIKE '%"5"%')

    при поиске я указываю какие обязательно должны быть теги т.е. LIKE '%"5"%' AND LIKE '%"100"%'

    указываю какие теги желательно что бы были LIKE '%"12"%' OR LIKE '%"33"%' OR LIKE '%"1"%'

    так же могу задать теги которых не должно быть NOT LIKE.


    Все хорошо, только вот возникла проблема с сортировкой, мне надо что бы чем больше желательных тегов присутствует, тем запись выше было в списке, т.е. если я делаю поиск LIKE '%"12"%' OR LIKE '%"33"%' OR LIKE '%"1"%', если в записи есть все 3 тега, то она идет первая, если 2 тега то вторая, а если 1 то последняя, примерно как то так.

    Можно ли как то такое организовать?
     
  2. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    мои боги. ты ищешь числа строковыми функциями?
     
  3. VLK

    VLK Старожил

    С нами с:
    15 дек 2013
    Сообщения:
    3.010
    Симпатии:
    58
    post_ tags тип столбца TEXT, можно еще как то искать?
     
  4. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    не, нельзя. у тебя неправильная архитектура. ну это просто потому что ты ничего не читал и ничего не понимал. просто слепил наспех. а теперь проблемы от того что у тебя велосипед с квадратными колесами не едет. ну прям грустьпичяль, да.
     
  5. VLK

    VLK Старожил

    С нами с:
    15 дек 2013
    Сообщения:
    3.010
    Симпатии:
    58
    И еще в нагрузку вопрос, суть задачи описана выше, точный поиск по тегам по всевозможным вариантам (обязательно должно быть, желательно что бы было и что бы не было) как еще можно организовать все это.
     
  6. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    причем знаешь что самое интересное. ты взял велосипед с круглыми колесами, тебе что-то в нем не понравилось. но что именно ты не понял ибо ты нифига не знаешь, напомню. поставил квадратные колеса и побежал на форум ныть что не едет. вот прям не знаю даже. поставь круглые колеса. помог советом? ну раз учиться ты не хочешь. буду стебать тебя очевидными вещами чо уж.

    Добавлено спустя 53 секунды:
    а на русский язык можно это предложение переводить обычный читатель сложно понимание
     
  7. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Могу порекомендовать книгу прочитать по реляционных баз данных.
    Поиск по тегам можно через sphinx реализовать.
     
  8. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    если следовать его логике брать готовое решение и ломать то книгу он не прочитает а свою напишет. и не поймет в ней нихера...
     
  9. VLK

    VLK Старожил

    С нами с:
    15 дек 2013
    Сообщения:
    3.010
    Симпатии:
    58
    Ну так я пытаюсь сам додумать как организовать все это, а не иду в раздел "сделай за меня", тем более я подобный подход вычитал на каком то форуме, там вроде как про квадратные колеса ни слова не было :) правда там и про столько изощренный поиск тоже речь не шла.

    И все же как тогда подобное можно организовать?
     
  10. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    херовый ты специалист. не должно быть таких вопросов. смекалки ноль, знаний ноль. только дай-дай-дай. зебра.
     
  11. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    VLK
    Есть теория реляционных баз данных, когда их прочитаешь и поймёшь, тогда сам и сможешь додумать как всё правильно сделать.
    Я так понимаю книгу читать ты не будешь?
     
  12. VLK

    VLK Старожил

    С нами с:
    15 дек 2013
    Сообщения:
    3.010
    Симпатии:
    58
    Почему, буду, но не сейчас, сейчас мне надо сделать, хоть кое как, все равно скажем так это для личного пользования, т.е. ни кто больше не пострадает :)
    Вот и ищу варианты, я конечно внутренне понимаю что что-то в моём варианте не то :)
     
  13. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Так если для себя и оно работает, зачем переделывать?
    Для поиска можешь посмотреть sphinx, elasticsearch.
     
  14. Chushkin

    Chushkin Активный пользователь

    С нами с:
    17 дек 2010
    Сообщения:
    1.062
    Симпатии:
    91
    Адрес:
    Мещёра, Центр, Болото N3
    Вам прямой путь к полнотекстовому поиску. Количество совпадений там вроде как нет (в innodb), а по релевантности - да. Читайте доку - там показано как сделать.
    Если нужно именно по количеству, то нужен другой вариант. Лучше всего с отдельной таблицей тегов.
    п.с.
    like '%...%' допустимо только на маленьких таблицах, ибо это полнотабличный скан (медленно).
     
  15. VLK

    VLK Старожил

    С нами с:
    15 дек 2013
    Сообщения:
    3.010
    Симпатии:
    58
    там есть некоторые косяки, что то типа нет возможности использовать LIMIT, не в прямом смысле, а в переносном (по крайне мере я не знаю как это замутить)
    Второй косяк большой объем данных, иногда страница не успевает обработать, выходит отведенные 180 сек.

    Заглянул по совету в FULLTEXT, подходящий вариант это IN BOOLEAN MODE.
     
  16. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    ты упоротый. вместо того чтоб пойти почитать ты налево и направо рассказываешь что ты нифига не знаешь.
    стало быть либо архитектура не та либо ты не так что-то делаешь. и мы об этом не узнаем потому что ты ничего не сможешь рассказать потому что ты ходишь и рассказываешь что ты нифига не знаешь.
     
  17. VLK

    VLK Старожил

    С нами с:
    15 дек 2013
    Сообщения:
    3.010
    Симпатии:
    58
    Почитать что? желательно поменьше и попонятнее.
     
  18. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    программист отесывается годами... ты торопишься куда-то? деньги мимо тебя пролетают что ли? пожар? самолет?
     
  19. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    VLK,
     
  20. VLK

    VLK Старожил

    С нами с:
    15 дек 2013
    Сообщения:
    3.010
    Симпатии:
    58
    Да, насчет sphinx, это надо ставить, это надо вникать, а мне надо чем быстрее тем лучше, да и не особо надо что бы все было супер но хотелось бы что бы все было как можно лучше :)
    Вот я и думал решить абы как, но по быстрому, через LIKE, хотя это квадратные колеса ну или FULLTEXT, но к сожаление это оказалось не совсем возможно, одним словом в моем случает, от чего пытался уйти к тому же и приходил только с другой стороны :)
    По этому буду допиливать что есть, скорее всего через 3 таблицы.

    Всем спасибо за помощь.
     
  21. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    сфинкс постигается за 20 минут
     
  22. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    у него нет этих 20 минут. он не бурильщик-нефтяник которого за бокалом пива в космонавта обратили чтоб метеориты бурить. у него всё еще быстрее должно быть. как у супермэна. как нео посмотрел картинку и уже знает боевое искусство. как лилу посмотрела пару кадров и знакома со всей историей человечества. как школота которому учиться программированию не хочется а писать самостоятельно утилиты уровня операционной системы - надо. в мире столько бабулеса мимо его рук проплывет пока он 20 минут тратит на ознакомление со сраным сфинксом.
     
  23. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Потратить двадцать минут?

    [​IMG]

    Сраный Сфинкс, как ты мог?!!111
     
  24. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    со сфинксом усё ок, бро. я пытаюсь выражаться мыслями тс)))))
     
  25. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Проклятый Сфинкс!!11 Ты встал на моём пути к мировому господству!!1

    ( я тоже :D )

    На самом деле Сфинкс простой как палка. Там конфиг, в конфиге описано что брать из бд (просто запрос), где там уникальный ключ (айдишник обычно) и что делать с полученными полями. Усё. Потом можно у Сфинкса спрость, в каких строках встречаются такое слово например. Он скажет уникальный ключ. Идёшь в бд, достаёшь строки. Усё.