php - 在单个查询中选择具有多个值的最后 N 行
问题描述
我有一张桌子:
留言:
<id-title-body-city-street-building-created on >
虽然我能够在多个查询中选择所需的消息,但我需要在一个查询中完成:
以下是我目前的疑问:
$queryOne = "SELECT `id`, `title`, `body`, `created_on` FROM `fcm_messages` WHERE `city`='$city' AND `street`='$street' AND `building`='$building'";
$queryTwo = "SELECT `id`, `title`, `body`, `created_on` FROM `fcm_messages` WHERE `city`='$city' AND `street`='$street' AND `building`='-'";
$queryThree = "SELECT `id`, `title`, `body`, `created_on` FROM `fcm_messages` WHERE `city`='$city' AND `street`='-' AND `building`='-'";
$queryFour = "SELECT `id`, `title`, `body`, `created_on` FROM `fcm_messages` WHERE `city`='-' AND `street`='-' AND `building`='-'";
我需要一个查询,因为我可以使用 ORDER BY id DESC 对所有消息进行排序,非常适合我的需要。
我可以对我现在拥有的查询应用相同的排序,但它会给出相同的结果,因为稍后它们会被一个接一个地推入数组,并且顺序会被打乱。
解决方案
我认为更简单的方法是布尔逻辑:
SELECT `id`, `title`, `body`, `created_on`
FROM `fcm_messages`
WHERE
(`city` = :city AND `street` = :street AND `building` = :building)
OR (`city` = :city AND `street` = :street AND `building` = '-')
OR (`city` = :city AND `street` = '-' AND `building` = '-')
OR (`city` = '-' AND `street` = '-' AND `building` = '-')
请注意,这使用查询参数将变量传递给查询,而不是将它们连接到查询字符串中:这既安全又高效。
推荐阅读
- javascript - 如何使附件可下载 - Angular
- android - 位置后台访问的 GooglePlay 警报
- node.js - Express.js,猫鼬:填充返回 null
- jenkins - SonarQube - Jenkins - 代码问题或超时?这是问题
- xpath - string-join() 函数抛出无效表达式
- python - /music/ 处的 TemplateSyntaxError 第 6 行上的块标记无效:'path',预期为 'empty' 或 'endfor'。您是否忘记注册或加载此标签?
- machine-learning - 为什么不能为 LSTM 使用 3D 体积输入?
- google-apis-explorer - “2020-10-13申请教室的数据暂时没有,请过几个小时再试。”
- flutter - 颤振自定义注释,如Required
- javascript - 如何传递多个值