【问题标题】:combine ORDER BY in UNION query在 UNION 查询中结合 ORDER BY
【发布时间】:2017-10-13 10:53:49
【问题描述】:

如何在 UNION 查询中组合 ORDER BY?

我试过了,但出错了:

SELECT country.country_name AS res
FROM   countries AS country
WHERE (lower (country.country_name) LIKE '%".$_POST['query']."%')
ORDER BY country.lang = '".$_POST['lang']."'
UNION
    SELECT  sec.loc AS res
    FROM    itin_secs AS sec
    WHERE   sec.loc LIKE '%".$_POST['query']."%'

【问题讨论】:

  • 你想按什么排序整个结果?
  • 了解预处理语句以防止 SQL 注入
  • 仍然错误... @jarlh
  • 添加错误信息
  • @Jens - 真是个好主意!

标签: php sql


【解决方案1】:

我会推荐:

SELECT res
FROM (SELECT c.country_name as res, 1 as priority, c.lang
      FROM countries AS c
      WHERE lower(c.country_name) LIKE '%".$_POST['query']."%')
      UNION ALL  -- recommended instead of `UNION`
      SELECT  sec.loc Ares
      FROM itin_secs as sec, 2, NULL
      WHERE sec.loc LIKE '%".$_POST['query']."%'
    ) x
ORDER BY priority, lang = '".$_POST['lang']."';

这个查询对最终排序非常明确。它还使用UNION ALL,因此查询不会产生删除重复项的开销。

作为次要问题(我的意思是,原始查询不起作用),您应该参数化查询。你真的应该从编写参数化查询开始,所以它们对于你想做的任何事情都是很自然的。

【讨论】:

  • 我还建议使用参数化语句。字符串连接可能会导致 SQL 注入。
  • @Gurv。 . .我非常同意。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-09-26
  • 1970-01-01
  • 2010-09-17
  • 1970-01-01
  • 2023-03-24
  • 2011-09-17
  • 1970-01-01
相关资源
最近更新 更多