我有这个组合框,用于选择在这种情况下特定航班运行的日期。
<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
值,即在第346天的搜索中启用了计划3。
基于以上所述,如何根据组合框中的选定选项查询数据库以进行搜索?
答案 0 :(得分:1)
从问题来看,不清楚列daysofweek
的数据类型,无论是varchar还是存储指示一组天数的字符串,(例如,值'1235'表示Mon,星期二,星期三和星期五),或者这是一个整数列,你有多行,每天一行。
如果是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%'
)
可以使用REGEXP
代替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
,MySQL SET
数据类型似乎符合要求。
跟进:
如果将星期几存储为VARCHAR(7),并且您希望将“星期二”,“星期三”和“星期五”的参数传递到SQL查询中以执行搜索...
我只是不明白你为什么要把从选择下拉框中返回的值翻译成'星期日','星期一'等字符串的麻烦。
返回的值(根据您的HTML代码,它们将为“0”到“7”),并且那些已经“匹配”存储在数据库中的值。