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值,即在第 346 天的搜索中启用了计划 3。

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

4

1 回答 1

1

从问题中不清楚 column 的数据类型daysofweek是否是 varchar 并且您正在存储一个表示一组天的字符串(例如,“1235”的值表示周一、周二、周三和周五),或者这是否是一个整数列,并且您有多行,每天一行。

如果它是 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,MySQLSET数据类型似乎符合要求。


跟进:

如果星期几存储为 VARCHAR(7),并且您想将“星期二”、“星期三”和“星期五”的参数传递到 SQL 查询中以执行搜索...

我只是不明白为什么你会费心将从选择下拉框中返回的值翻译成字符串,如“星期日”、“星期一”等。

返回的值(根据您的 HTML 代码,它们将是“0”到“7”),并且那些已经“匹配”存储在数据库中的值。

于 2013-02-13T23:04:24.110 回答