我有一个mysql表"banner",其中有一列"device"
如果标题用于桌面,则列"device"为NULL;如果标题用于iphone/ipad设备,则列为"ios"。
现在我正在编写一个脚本来显示基于设备的横幅。。
例如,如果有人使用桌面访问网站,则查询为:
SELECT id FROM banners WHERE 1 ORDER BY RAND() LIMIT 1
如果我用iphone访问网站,查询会发生变化:
SELECT id FROM banners WHERE device LIKE '%ios%' ORDER BY RAND() LIMIT 1
一切都很好,只是如果我有0条IOS横幅,我会显示一条DESKTOP横幅,而不是什么都不显示,但我不知道如何更改查询。。
例如,如果我添加OR子句,IOS的优先级仍然是???
SELECT id FROM banners WHERE ( device LIKE '%ios%' OR device ='') ORDER BY RAND() LIMIT 1
select id from banners A ,(select count(*) AS cnt from banners where device LIKE '%ios%') B
WHERE
device LIKE (case when B. cnt = 0 then '%%' else '%ios%' end)
ORDER BY RAND() LIMIT 1
数据库NULL
和空字符串之间存在差异,我认为这就是您在这里遇到的问题。试试这个:
SELECT id FROM banners WHERE ( device LIKE '%ios%' OR device IS NULL) ORDER BY RAND() LIMIT 1
有关在MySQL 中使用NULL
值的信息,请参阅MySQL网站的这一部分