PHP + Mysql复杂的SQL SELECT查询

时间:2015-06-26 11:21:02

标签: php mysql select

我被认为如何从表格中制作一个复杂的(我认为)SELECT查询,其中包含3种评论(第一个 - 正面评论,第二个 - 负面评论和第三个 - 中立评论)。使用PHP我想SELECT和diplay第一个负面评论,并在负面评论之后显示所有其他类型的评论。如何使用一个SELECT查询以及我用来分隔分页的LIMIT来显示它们?

表格示例:

id - unique id

type - (value 1-positive, 2-negative, 3-neutral)

text - value

我首先想到SELECT * FROM comments WHERE type='2' ORDER BY id LIMIT 0,100

while(){

...

}

在第二次之后

SELECT * FROM commetns WHERE type!='2' ORDER BY id LIMIT 0,100

while(){

...

}

但如果有两个不同的SELECT查询,如何使用LIMIT进行分页?

5 个答案:

答案 0 :(得分:2)

使用UNION和LIMIT的组合。 但是,您需要确定绑定变量,并指定要显示的行数。

(SELECT * FROM comments WHERE type = '2' LIMIT ?)
UNION
(SELECT * FROM comments WHERE type != '2' LIMIT ?);

SQLFiddle:http://sqlfiddle.com/#!9/6d682/1

答案 1 :(得分:1)

在ORDER BY子句中使用IF语句将类型2更改为首先排序: -

SELECT *
FROM comments
ORDER BY IF(type = 2, 0, type)
LIMIT 1, 20

这将首先给出所有否定(类型2)注释,然后是其他注释(无论是正面还是中性)。您可能希望为排序的一致性添加额外的列。

答案 2 :(得分:1)

我没有完全了解您的情况,但我认为您可以使用OR运算符来获取您想要的内容:

SELECT * from comments WHERE type=2 OR type=-2 ORDER BY type DESC

答案 3 :(得分:0)

我必须缺少上下文,否则你可以使用:

SELECT * from comments ORDER BY type ASC LIMIT 0,10

因此,通过订购类型,您将首先获得类型1的所有项目,然后是2和3。

只要使用限制就会将它们切成你想要的部分,它仍然会尊重订单。

答案 4 :(得分:0)

您可以使用union来合并表组,但是在所有表中必须具有相同的列,例如:

select commetns,'nagtive' as type from nagtive_tbl limit 10
union
select  commetns,'positive' as type from positive_tbl limit 10
union
select  commetns,'neutral' as type from neutral_tbl limit 10

此查询返回表包含每行包含的不同表中的所有注释,因此您可以在客户端上构建列表时对其进行过滤。