Mysql 从WHERE子句的每个条件中仅选择一项
这是我当前的查询:Mysql 从WHERE子句的每个条件中仅选择一项,mysql,sql,limit,Mysql,Sql,Limit,这是我当前的查询: SELECT topic.title, topic.content_id, topic.thumbnail_icon, text.description FROM mps_contents AS topic, mps_contents AS text WHERE topic.featured = '1' AND topic.active = '1' AND topic.page_id = (SELECT page_id
SELECT
topic.title,
topic.content_id,
topic.thumbnail_icon,
text.description
FROM
mps_contents AS topic,
mps_contents AS text
WHERE
topic.featured = '1' AND
topic.active = '1' AND
topic.page_id = (SELECT page_id
FROM mps_pages
WHERE page_short_name = 'services'
OR page_short_name = 'questions_faqs') AND
text.section_id = (SELECT section_id
FROM mps_sections
WHERE section_short_name = 'page_text') AND
text.page_id = topic.content_id AND
topic.resource_type = 'subpage' AND
text.resource_type = 'text'
ORDER BY RAND() LIMIT 2
编辑:这是MySQL 我真正想做的是从
服务
中选择一个特色项目,从问题
中选择一个特色项目。但是,此查询将从服务
或问题
中选择2个特色项目
我知道有一种选择是对
联合
的两个查询进行联合
并执行限制1
,但这意味着我必须重复90%的查询。我可以不必求助于UNION
s就可以做到这一点吗?我相信,除非重新设计/规范化表,否则在某种程度上,您总会重复查询
如果你只想避免联合,你可以重写
topic.page_id = (SELECT page_id
FROM mps_pages
WHERE page_short_name = 'services'
OR page_short_name = 'questions_faqs')
到
我不认为会有太多的性能提升,尽管我在MySQL中运行了两次rand()。InnoDB表。这就是“味道”的意思吗?联合就是一个查询;我不知道不使用工会如何得到你想要的东西。哦。。您是对的,但是一个
联合
需要我重复原始查询的90%,只是为了指定一个不同的条件。我在想,如果我能避免那样做,我明白了。在这种情况下,我想我只考虑这个查询的可读性,而不是性能。
topic.page_id = (SELECT page_id
FROM mps_pages
WHERE page_short_name = 'services' ORDER BY RAND() LIMIT 1)
OR
topic.page_id = (SELECT page_id
FROM mps_pages
WHERE page_short_name = 'questions_faqs' ORDER BY RAND() LIMIT 1)