我有下表(讲座表)
------------------------------------------------------------------------
| lecture_name | lecturer_name | class |day| start|end |
|-------------- +--------------- +--------------------+----------------|
| Electronics 2 | Jhon Rayan | Engineering Class 2| 0 | 8.5 |11.5 |
------------------------------------------------------------------------
我尝试在上表中构建一个关于日期的搜索页面,但是我遇到了一些问题 我在数据库中使用的那一天是整数(0表示星期日,1表示星期一......) 我需要输入搜索面板,例如sunday,它在数据库中表示0然后得到结果并显示为星期日而不是0 我用来得到结果的查询如下
$raw_results = mysql_query("SELECT lecture_name,
lecturer_name,
class,
start,
end,
CASE day
WHEN 0 THEN 'Sunday'
WHEN 1 THEN 'Monday'
WHEN 2 THEN 'Tuesday'
WHEN 3 THEN 'Wednesday'
WHEN 4 THEN 'Thursday'
WHEN 5 THEN 'Friday'
WHEN 6 THEN 'Saturday'
ELSE 'Unknown'
END AS x
FROM lecture_table WHERE (`day` LIKE '%".$name."%')") or die(mysql_error());
所以在上面的查询之前我应该使用什么来将我的输入搜索从星期日转换为0以将我的条目与数据库进行比较。
答案 0 :(得分:0)
你在找这样的东西吗?
SELECT lecture_name, lecturer_name, class, start, end, day_name
FROM lecture_table l JOIN
(
SELECT 0 day, 'Sunday' day_name UNION ALL
SELECT 1, 'Monday' UNION ALL
SELECT 2, 'Tuesday' UNION ALL
SELECT 3, 'Wednesday' UNION ALL
SELECT 4, 'Thursday' UNION ALL
SELECT 5, 'Friday' UNION ALL
SELECT 6, 'Saturday'
) d ON l.day = d.day
WHERE day_name = 'Sunday'
输出:
| LECTURE_NAME | LECTURER_NAME | CLASS | START | END | DAY_NAME | |---------------|---------------|---------------------|-------|------|----------| | Electronics 2 | Jhon Rayan | Engineering Class 2 | 8.5 | 11.5 | Sunday |
这是 SQLFiddle 演示
如果我想要星期一的另一天的结果,...我该怎么办呢
如果您只想要星期一的记录
... WHERE day_name = 'Monday'
如果您想要几天的记录
... WHERE day_name IN('Monday', 'Wednesday', 'Friday')
当然,不是使用精确值,而是使用php变量插入查询字符串,例如
$sql = "SELECT ... WHERE day_name = '$name'"; // Don't forget validate and sanitize user input
或更好切换到 PDO / mysqli 并使用预备语句。