在组合框选择时查询数据库

时间:2013-02-13 22:47:33

标签: html mysql

我有这个组合框,用于选择在这种情况下特定航班运行的日期。

            <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。

基于以上所述,如何根据组合框中的选定选项查询数据库以进行搜索?

1 个答案:

答案 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”),并且那些已经“匹配”存储在数据库中的值。