У меня есть страница поиска, которая имеет несколько полей, которые используются для создания изысканного поиска. Каждое поле является необязательным. Я пытаюсь начать обработку моего SQL-запроса, чтобы он работал с учетом правильных переменных, но у меня проблемы.Разрешение дополнительных параметров для MySQL Query
Вот запрос SQL я в настоящее время:
SELECT
indicator.indid,
indicator.indicator,
indtype.indtype,
provider.provider,
report.report,
actor.actor
FROM
actor,
indicator,
indtype,
report,
provider
WHERE
indicator.indtypeid = indtype.indtypeid
AND indicator.actorid = actor.actorid
AND indicator.reportid = report.reportid
AND report.providerid = provider.providerid
AND indicator.indicator LIKE '%$indicator%'
AND indicator.indtypeid = $indtypeid;
Всякий раз, когда я обеспечить indicator
и indtypeid
, поиск работает просто отлично. Однако, когда я оставляю поле indtypeid
пустым и имеет значение переменной *
(в качестве значения по умолчанию), запрос не возвращает никаких результатов. Я пробовал играть с запросом вручную, и мне кажется, что не нравится *
или знак %
. В принципе, если указан только индикатор, и не указан indtypeid
, я хочу вернуть все индикаторы для всех indtypeids
.
Я уверен, что у меня что-то не хватает, но я был бы признателен за любую помощь, которая может быть предоставлена. Во-первых, возможно, я ошибаюсь.
Это имеет смысл для меня, но когда я бросаю его в свой скрипт, он, похоже, не работает. Он не возвращает никаких результатов независимо от того, какую комбинацию атрибутов я использую. –
Я попытался использовать это вручную, удалив имя переменной и проверку NOT NULL переменной, просто чтобы увидеть, могу ли я заставить ее работать без скрипта, но не получаю никаких результатов. ВЫБОР i.indid, i.indicator, it.indtype, p.provider, r.report, a.actor ОТ актеру INNER JOIN индикатор I ON a.actorid = i.actorid INNER JOIN indtype это ПО i.indtypeid = it.indtypeid INNER JOIN отчета г на i.reportid = r.reportid INNER JOIN провайдера р на r.providerid = p.providerid ГДЕ 1 = 1 И (i.indicator LIKE '% плохо%') И (i.indtypeid = '*'); –
@ChrisSanders, проверьте свои соединения и ваши отношения между ними, запрос должен работать только для 'Where 1 = 1' и должен возвращать все данные, иначе в ваших соединениях будет проблема. –