2

絞り込み検索を作成するために使用される複数のフィールドを持つ検索ページがあります。すべてのフィールドはオプションです。適切な変数が与えられた場合に機能するようにSQLクエリの作成を開始しようとしていますが、問題が発生しています。

これが私が現在持っている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フィールドを空白のままにし、変数を*(デフォルト値として)に設定すると、クエリは結果を返しません。クエリを手動で試してみましたが、*または%記号が気に入らないようです。基本的に、インジケーターのみが指定されていて、noindtypeidが指定されている場合は、すべてのインジケーターを返しますindtypeids

私は何かマイナーなものが欠けていると確信していますが、提供できる支援をいただければ幸いです。そもそもこれはすべて間違っているのかもしれません。

4

1 に答える 1

6

代わりにこれを試してください:

SELECT i.indid,    i.indicator, it.indtype, 
       p.provider, r.report,    a.actor 
FROM actor a 
INNER JOIN indicator i ON a.actorid    = i.actorid
INNER JOIN indtype  it ON i.indtypeid  =  it.indtypeid
INNER JOIN report   r  ON i.reportid   = r.reportid 
INNER JOIN provider  p ON r.providerid = p.providerid 
WHERE 1 = 1
  AND ($indicator IS NULL OR i.indicator LIKE '%$indicator%')
  AND ($indtypeid IS NULL OR i.indtypeid = $indtypeid);

したがって、 a を渡すと$indicator = NULL、最初の条件AND ($indicator IS NULL OR i.indicator LIKE '%$indicator%')は に解決されるため無視されTrue、2 番目の条件についても同じことが起こります。

他の条件を削除してs にWhere置き換えました。2 つの変数とそれぞれの値を渡す場合にクエリを正常に機能させるために、この場合は常に true であるため、すべての結果が返されます。JOINWHERE 1 = 1$indicator$indtypeidNULL1 = 1

于 2012-04-17T14:56:33.687 に答える