我现在是分开写,就是判断cid=16没有时把它转为cid=0
SELECT * FROM ads WHERE sid='11' AND cid='16' ORDER BY RAND() LIMIT 1
解决方案 »
- INNODB 下的独享表空间和共享表空间的问题
- Mysql一条判断检索的问题。高手来看看
- Mysql的给一个有数据的表添加字段,添加不进去
- 紧急求助,关于存储过程的问题
- 如何设置log-slow-queries,直接加进去会报错
- 如果postgresql编码是unicode, 分类统计(group by)、distinct遇到汉字就不正确了,如何解决
- mysql表经常被锁住怎么办?
- 急求一个sql查询语句
- MYSQL 多表联合查询并分组的问题?
- excel导入数据到mysql
- Commit exception overridden by rollback exception
- 哪个SQL更快点?
SELECT * FROM ads WHERE sid='11'
AND
cid=CASE WHEN EXISTS(SELECT 1 FROM ADS WHERE cid='16') THEN '16' ELSE '0' END
ORDER BY
RAND()
LIMIT 1
http://www.accessbbs.cn/bbs/viewthread.php?tid=19546
上面这条语句没查到数据时,让它转为:SELECT * FROM ads WHERE sid='11' AND cid='0' ORDER BY RAND() LIMIT 1
我现在是分开写,想把这二句整在一起,写成一句SQL,二楼的大哥的查询结果是正确的,我只是觉得有个子查询不大好,
数据如下
ads 1 AA C001
2 BB C002基于上面数据我期望结果为1 AA-C001
SELECT * FROM ads WHERE sid='11' AND (cid='16' or cid='0') ORDER BY cid desc ,RAND() LIMIT 1
sid cid
11 0
8 16
2楼的方法会查出你要的结果吗?
查得出,当sid=11 and cid=16没有时,它就用上了sid=11 and cid=0,就符合你的那个示例记录了.
(SELECT * FROM ads WHERE sid='11' AND cid='16' ORDER BY RAND() limit 1)union(SELECT * FROM ads WHERE sid='11' AND cid='0' ORDER BY RAND() limit 1)limit 1
哈哈哈哈