zvermafia
@zvermafia
WebDev

Что не так с SQL запросом?

Этот код должен дать один результат, но не дает:
select * from `catalog` where (status = 1) and (description LIKE '%ADVISE AND AUDIT%' OR title LIKE '%ADVISE AND AUDIT%' OR domain LIKE '%ADVISE AND AUDIT%')


Если его изменить так то дает, но не фильтрует по статусу:
select * from `catalog` where status = 1 and description LIKE '%ADVISE AND AUDIT%' OR title LIKE '%ADVISE AND AUDIT%' OR domain LIKE '%ADVISE AND AUDIT%'


Как изменить код чтобы работало LIKE %query% по description, title и domain, а также фильтрировал по status'у?

Schema:
title: varchar(255)
domain: varchar(255)
description: text
status: enum('-1', '0', '1')
  • Вопрос задан
  • 187 просмотров
Решения вопроса 1
zvermafia
@zvermafia Автор вопроса
WebDev
Оказывается надо было писать status = '1'
То есть:
select * from `catalog` where (status = '1') and (description LIKE '%ADVISE AND AUDIT%' OR title LIKE '%ADVISE AND AUDIT%' OR domain LIKE '%ADVISE AND AUDIT%') order by `follows` desc limit 10 offset 0


Поле status было enum(-1, 0, 1), только я делал это в Laravel Migrations:
$table->enum('status', array(-1, 0, 1));

А в PHPMyAdmin показывает тип поле (status) таким:
enum('-1', '0', '1')

Короче все решилось
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
toxa82
@toxa82
У вас скорее всего ошибка с приоритетами в WHERE и ваш второй вариант равен
select * from `catalog` where (status = 1 and description LIKE '%ADVISE AND AUDIT%') OR title LIKE '%ADVISE AND AUDIT%' OR domain LIKE '%ADVISE AND AUDIT%'

и поэтому `status` учитывается только с полем `description`, а `title` и `domain` выбираются с любым статусом
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы