0

この場合、特定のフライトが運航する日を選択するために、このコンボボックスがあります。

            <select style="border:1px solid #DCDCDC; color:#003663; font-size:11px;" class="search" name="day" id="day">
                <option value="0">Sunday</option>
                <option value="1">Monday</option>
                <option value="2">Tuesday</option>
                <option value="3">Wednesday</option>
                <option value="4">Thursday</option>
                <option value="5">Friday</option>
                <option value="6">Saturday</option>
            </select>

情報を探すテーブルは、db_schedules と呼ばれます。テーブル構造には、 という列が含まれていますdaysofweek。0123456 曜日を指定します。0 は日曜日、1 ~ 6 は月曜日から土曜日です。各レコードには指定されたdaysofweek値があります。つまり、スケジュール 3 は 346 日の検索で有効になります。

上記に基づいて、コンボボックスから選択したオプションに基づいて検索するためにデータベースにクエリを実行するにはどうすればよいですか?

4

1 に答える 1

1

質問から、 column のデータ型がdaysofweekvarchar であり、一連の曜日を示す文字列 (たとえば、月、火、水、金を表す「1235」の値) を格納しているかどうかが明確ではありません。それが整数列であるかどうか、および複数の行があり、各日に 1 つずつあります。

VARCHAR 列の場合、3、4、6 日を検索するには、これらの日のいずれかに一致する db_schedule 行が必要な場合:

SELECT ... 
 FROM db_schedule d
WHERE (  d.daysofweek LIKE '%3%' 
      OR d.daysofweek LIKE '%4%'  
      OR d.daysofweek LIKE '%6%'
      )

すべての日で一致を取得するには、ANDそれらではなくそれらのOR述語

SELECT ... 
 FROM db_schedule d
WHERE (   d.daysofweek LIKE '%3%'
      AND d.daysofweek LIKE '%4%'  
      AND d.daysofweek LIKE '%6%'
      )

の代わりにAREGEXPを使用できますLIKE。「OR」条件の場合、たとえば「3」、「4」、または「6」で一致を見つける場合:

 WHERE d.daysofweek REGEXP '[346]'

INSTR関数も機能します。

 WHERE (  INSTR(d.daysofweek,'3') 
       OR INSTR(d.daysofweek,'4')  
       OR INSTR(d.daysofweek,'6')
       )

直面している正確な問題に関するより詳細な情報がなければ、他の解決策を提案しても生産的ではありません。

daysofweekしかし、を格納するためのより適切なデータ型が存在する可能性があることを指摘するかもしれませんSET


ファローアップ:

曜日が VARCHAR(7) として格納されていて、'Tuesday'、'Wednesday'、'Friday' の引数を SQL クエリに渡して検索を実行する場合...

選択ドロップダウンボックスから返された値をわざわざ「日曜日」、「月曜日」などの文字列に変換する理由がわかりません。

返される値 (HTML コードによると、"0" から "7" になります) と、データベースに格納されている値と既に "一致" しています。

于 2013-02-13T23:04:24.110 に答える