如何使用union限制mysql_query

时间:2016-01-29 20:40:10

标签: php mysql

我有一个mysql_query,它使用union同时处理两个查询,如:

$friends_a = mysql_query("(SELECT * FROM users WHERE id!='$user_q[id]' AND id='$friends_1_q[user_one_id]') UNION ALL (SELECT * FROM users WHERE id!='$user_q[id]' AND id='$friends_1_q[user_two_id]')");` 

我希望限制这个(两个查询的唯一限制),我该怎么办? (我已经尝试了很多我在网上或这里找到的东西)。抱歉英语不好:D

1 个答案:

答案 0 :(得分:1)

您可以将查询包装在parens中,并将其作为内联视图引用。例如,要返回最多五行:

SELECT v.*
  FROM ( 
         -- original query goes here
       ) v 
 LIMIT 5

考虑在外部查询上添加ORDER BY(在LIMIT子句之前),以使结果更具确定性。

或者,完全抛弃UNION ALL操作,只写一个查询:

SELECT u.*
  FROM users u 
 WHERE u.id != ? 
   AND u.id IN ( ? , ? )
 ORDER BY u.id
 LIMIT 2

提供占位符的值:

$user_q[id]
$friends_1_q[user_one_id]
$friends_1_q[user_two_id]

附录:

不推荐使用mysql_个函数。使用mysqli或PDO进行新开发。并使用带有绑定占位符的预准备语句。

如果这不可能(无论出于何种原因),请确保正确转义SQL文本中包含的变量值。