一尘不染

MySQL选择与ID数组匹配的多行

sql

首先:

SELECT `key`, `value` FROM settings
 WHERE `key` = :base_url
    OR `key` = :google_analytics
    OR `key` = :site_domain

这是选择多行的正确方法吗?或者,还有更好的方法?因为不是OR全部,而是全部……所以听起来不对。

问题编号2:

这是我的查询,它选择具有分页的用户:

SELECT id, email, verified, level, name_surname, age, sex, profession, education, location, privacy, suspend FROM users LIMIT :start, :results

有时我想传递用户数组以返回此查询,例如array(1,2,3,4,5)

显然,简单地添加WHERE $array是行不通的。那我该怎么办呢?

有时我不想传递这个ID数组,那么当有ID列表和没有ID列表时,如何在状态之间进行切换?如果在prepare语句上,我是否只是创建php?这似乎很明显,但是最好询问最佳实践:)


阅读 294

收藏
2021-03-17

共1个答案

一尘不染

要从where子句获取多个值,无需使用OR。使用in,例如在以下查询中:

SELECT `key`, `value` FROM settings
 WHERE `key` in ( :base_url, :google_analytics, :site_domain);

这与第一个相同:

SELECT * FROM users where id in (1,2,3,4,5);

因此,如果您有一个用户ID数组,则必须implode使用','粘合字符。

这是php的完整示例:

<?php
$users = array(1,2,3,4,5);
$usersStr = implode(',', $users); // returns 1,2,3,4,5
$sql = "SELECT * FROM users where id in ({$userStr})";
....
2021-03-17