Доброго времени суток. что-то напортачил я... вот такой запрос Код (PHP): SELECT id,headline,alias,date FROM news WHERE (published=NNN AND date <= NNN) AND (nsyujety LIKE SSS AND nsyujety NOT LIKE SSS AND nsyujety NOT LIKE SSS AND nsyujety NOT LIKE SSS AND nsyujety NOT LIKE SSS) ORDER BY date DESC LIMIT NNN,NNN он вызывает нагрузку на mysql если вместо (nsyujety LIKE SSS AND nsyujety NOT LIKE SSS AND nsyujety NOT LIKE SSS AND nsyujety NOT LIKE SSS AND nsyujety NOT LIKE SSS) прописать (nsyujety LIKE SSS) то нагрузка значительно падает но в чем разница? Добавлено спустя 2 минуты 16 секунд: смысл такой у новости есть метки (как теги) они могут повторяться их может быть несколько мне нужно вывести новость с одной меткой, но исключить 4 другие метки PHP, JavaScript, SQL и другой код пишите внутри тегов Код ( (Unknown Language)): [b]php][/b]Тут код[b][/[/b][b]code][/b][/color]
да, но разница с (nsyujety LIKE SSS) раз в 180 где-то что как-то не сходится... Добавлено спустя 1 минуту 26 секунд: как эту задачу решить по-другому? (и не важно LIKE это или как-то по-другому)
ща только присмотрелся к запросу по внимательнее - просто жжжесть O_O расскажи, в чём смысл этой строки - Код (PHP): (nsyujety LIKE SSS AND nsyujety NOT LIKE SSS AND nsyujety NOT LIKE SSS AND nsyujety NOT LIKE SSS AND nsyujety NOT LIKE SSS) ??????????
мне нужно вывести новость с одной меткой, но исключить 4 другие метки чисто по запросу выбрать новость с nsyujety = Спорт и не равно Еда, Туризм, Рыбалка, Машины то есть если у новости две метки Спорт и Еда, то она мимо идет)) Добавлено спустя 52 секунды: я вижу вариант проверить на php? с while ? Добавлено спустя 1 минуту 16 секунд: или это тоже самое будет?
мне кажется, это строка просто логически не правильно выражено, то есть, не соответствует твоему представлению
почему? она рабочая, и так как я и написал SSS это просто заглушка но может можно как-то лучше составить? я так понимаю что она грузит mysql подбирая под мой запрос, перебирая каждую новость вот отсюда и нагрузки... а если на php проверять? но одна проблема сколько ставить в лимит? отдавать все новости это же нагрузку не снизит?
как вариант то есть будет 20 новостей выбираться а на php сделать проверку nsyujety != 'Еда' и тд а если в этих 20 не найдено, проверить следующие 20 или даже по 10
эм, разговор по кругу))) я условия хочу вынеси из SQL для того чтобы снизить нагрузку не пользовался этим сервисом никогда... как бы разобраться что ему надо)) а для чего структура ?
в его случае проще наверное использовать FULLTEXT или меня структуру БД. ну или вообще ставить сфинкса
как раз вот для таких моментов ((( Добавлено спустя 1 минуту 12 секунд: VLK, все возможно... Как все покажет, там уже и виднее будет (((
в левую часть вставляешь SQL запрос на создание таблицы, так же туда же вставляешь запросы на добавление записей в эту таблицу, для теста. потом жмешь "Build Schema", и уже в правом окне можно выполнять запросы на получение данных из таблицы (SELECT) потом копируешь полученную ссылку, даешь ее сюда, мы можем заходить, видеть как у тебя там и что организовано.
менять структуру это если только запрос с такой же логикой и новой структурой будет меньше грузить, в чем я сомневаюсь ибо логика та же перебирать новости соответствующие условиям и когда условие выполнено - выводить. нагрузка это время в секундах, на хостинге, поэтому тут либо переезжать на vps либо делать на php проверку Добавлено спустя 14 минут 54 секунды: VLK, схему сделаю, попозже скажите, а на время выполнение/нагрузку влияет количество полей? ну там SELECT поле1,поле2,поле3.... и допустим если поле id это цифра то text это большой текст, это же все влияет ? и количество условий тоже влияет? WHERE ...
количество получаемых полей не влияет, а вот по чему искать по цифре или по тексту влияет, по цифрам куда быстрее. количество условий тоже влияет. набери в поисковике "mysql много like оптимизация запроса" или "mysql много where оптимизация запроса" или как то так, может поможет. скорее всего тебе поможет FULLTEXT, но нужно видеть таблицу, по чему именно осуществляется поиск и как именно, потому что рассуждать не пойми о чем очень сложно.
justc опиши задачу чуть подробнее и по пунктам, чтобы там были все нужные условия, так будет проще понятно как переделать структуру на более оптимизированную
justc Приведите реальный вариант запроса, а не болванку, тогда получите реальную помощь. Добавлено спустя 1 минуту 55 секунд: upd Хм, что-то я не обратил внимания что ТС уже "свалил". Бывает...
ну вот не все такие умные как ты. в 70х годах изобрели РСУБД и язык SQL и успешно решали задачи с миллионами записей на очень скромном железе. конкретно поисковые теги делают не через тупой перебор, а через связи многие-ко-многим. https://www.google.ru/search?q=sql+tags+many+to+many+relationship Добавлено спустя 5 минут 54 секунды: Вот конкретно пример многие ко многим и условием типа "не входит" http://www.mysqldiary.com/a-many-to-many-relationship-table ... n-problem/
теги делаются через две таблицы в плюс к той, что есть: 1. сущности, допустим объявления 2. теги, всякие разные, без указания какой где и что 3. таблица связей в два поля: номер объявы + номер тега Называется, как сказал Андрей, многие ко многим. А то вы сделали, хотя вам говорил так не делать, - это называется говно.