2014-02-21 28 views
1

我想获取符合特定条件的特定记录。其中之一是,只有在某一列中找到当前星期几的情况下才能找到它们。我有下面的查询,如果我只是输入自己的平日,但它不会返回任何结果,如果我使用字段名称。MYSQL获取当前dayofweek列表中的项目

因此,字段'dagen'包含任何一天*星期四和星期五的工作日清单如'5','6'。

SELECT * FROM playlist_item 
WHERE playlist_id='31' 
AND type_id='56' 
AND jobcomplete='0' 
AND startuur<=TIME(NOW()) AND einduur >=TIME(NOW()) 
AND (dagen='*' OR DAYOFWEEK(NOW()) IN (dagen)); 

如果我更换达恩在与..到底(5,6),它完美的作品,而不是使用列名的时候..我已经试过了,而不单引号的价值,用引号..他们都没有工作..什么是正确的方式来获得我想要的结果?

SQLFiddle的exaple可以发现here

+0

你能提供[sqlfiddle](http://sqlfiddle.com/)示例问题与示例数据集 –

回答

0

假设达恩是包含逗号分隔的星期几的列表中的列,尝试这样的事情: -

SELECT * FROM playlist_item 
WHERE playlist_id='31' 
AND type_id='56' 
AND jobcomplete='0' 
AND startuur<=TIME(NOW()) AND einduur >=TIME(NOW()) 
AND (dagen='*' OR FIND_IN_SET(DAYOFWEEK(NOW()), dagen)); 

注意逗号分隔清单通常是数据库规范化程度不高的标志。

+0

这工作,谢谢!我一直在寻求改进,你会如何选择记录应该被发现的日子? –

+0

我会建议一个更好的解决方案是设置另一个表,每周的每天一行和播放列表。然后你可以做一个简单的连接,它将被编入索引,并且可能比使用FIND_IN_SET(不能使用索引)快得多。 – Kickstart