Mysql 对工会问题的两个疑问
我目前正在编写一个小PHP脚本,需要对其执行联合查询。 我想从一个查询中获取7个元素,从另一个查询中获取1个元素,这两个元素都在同一个表上执行。 第一个是:Mysql 对工会问题的两个疑问,mysql,Mysql,我目前正在编写一个小PHP脚本,需要对其执行联合查询。 我想从一个查询中获取7个元素,从另一个查询中获取1个元素,这两个元素都在同一个表上执行。 第一个是: SELECT * FROM ( select * from quiz where id != '10' and langage = 'ar' order by nshares
SELECT * FROM (
select * from quiz
where id != '10'
and langage = 'ar'
order by nshares
DESC LIMIT 15) a
order by rand() limit 7
第二个是:
select * from quiz
where id != '10'
and langage = 'ar'
order by qid DESC
limit 1
我试过了
SELECT * FROM (
select * from quiz
where id != '10'
and langage = '$loga'
order by nshares DESC
LIMIT 15) a
order by rand()
limit 7
union
select * from quiz
where id != '10'
and langage = '$loga'
order by qid DESC
limit 1
但这似乎不起作用。有人能帮忙吗?你很接近了。您只需要在子查询周围加上括号:
(select q.*
from (select q.*
from quiz q
where id <> '10' and langage = '$loga'
order by nshares DESC
limit 15
) q
order by rand()
limit 7
) union
(select q.*
from quiz q
where id <> '10' and langage = '$loga'
order by qid desc
limit 1
);
是一个显示语法工作的SQL小提琴
注:
联合会产生删除重复项的开销。如果您不希望出现这种开销,那么应该使用union all。
假设有足够的匹配数据,您的查询可能返回7或8行,因为第二个查询中的随机行可能与第一个查询匹配。
语法错误是因为只有在union/union all查询结束时才允许order by,除非使用子查询。
如果id是一个数字,则不要使用单引号进行比较。它会让人困惑,也会让优化器困惑。
需要一个表达式。在19号位置附近。在位置19附近,这种类型的子句以前被解析过。在位置20的select附近,以前分析过这种类型的子句。在位置158处的order by附近无法识别语句类型。在位置附近订购158@TestilaSupport . . . 它确实有效。我只是添加了一个指向SQL FIDLE的链接,我甚至不需要更改查询中的任何内容。第二个查询似乎总是最后一个结果。您可以对它们进行随机排序,以便第二个查询与其他7个结果也处于随机位置吗?修复了所有问题:非常感谢您的帮助!