具有与分页相关的多个状态变化的 Mysql 查询

标签 mysql

我有这样的 table

id  |  eventid   |  category  | type
----+------------+------------+------
1   |      1     |  music     | event
2   |      2     |  music     | event
3   |      3     |  music     | event
4   |      4     |  music     | event
5   |      5     |  music     | page
6   |      6     |  music     | page

现在我需要获取 4 条记录的数据,其中 2 条来自带有状态事件的表,2 条来自带有状态页面的表

例子:

id  |  eventid   |  category  | type
----+------------+------------+------
1   |      1     |  music     | event
2   |      2     |  music     | event

5   |      5     |  music     | page
6   |      6     |  music     | page

我试过下面的查询但是我得到了错误

SELECT * 
FROM event_subcategory
WHERE category =  'music'
AND TYPE =  'event'
LIMIT 2 
UNION 
SELECT * 
FROM event_subcategory
WHERE TYPE =  'page'
LIMIT 2 

最佳答案

如果您想在 UNION 中使用 LIMIT,最好在子查询周围使用括号,这样您就可以确保在没有它们的情况下限制正确的选择,第二个 LIMIT 适用于两个子选择。这更像我认为你想要的那样;

(SELECT * FROM event_subcategory WHERE category = 'music' AND TYPE = 'event' LIMIT 2)
UNION     
(SELECT * FROM event_subcategory WHERE TYPE = 'page' LIMIT 2)

An SQLfiddle to test with

(作为旁注,您可能还想将 WHERE category = 'music' 添加到您的第二个子查询中,因为这两个部分是完全独立的)

关于具有与分页相关的多个状态变化的 Mysql 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15264742/

相关文章:

sql - 查询从日期时间转换为日期mysql

php - SQL : username and password not recognized correctly

php - 插入查询中的PHP解析错误

mysql - SQL Server 2008 的 ADDTIME 和 SEC_TO_TIME

php - 如何使用 Laravel5 从查询中删除 "\"

mysql - Hibernate 数据访问的 JDBC 异常

mysql - 构建复杂 SQL 查询的技巧

javascript - Node js 检查 mysql 表中是否存在数据。- TypeError : res. send 不是函数

PHP 和 MySQL 与 Highchart

c# - 如何确定是否在 MySql 连接中使用 SSL?