mysql选择与id数组匹配的多行

时间:2013-12-09 14:17:04

标签: php mysql sql arrays

首先:

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 if else?这似乎很明显,但最好问一下最佳实践:)

3 个答案:

答案 0 :(得分:32)

<强> 1。 where子句中的乘法值,不需要使用OR。使用in,就像查询一样。

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

<强> 2。与第一个相同。

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

所以如果你有一组用户id,你必须用','胶水内爆

继承了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})";
....

答案 1 :(得分:0)

问题1

我不确定我理解all of them的含义,但是如果你使用OR则意味着“任何这些条件都可以成立,即使其中有多个是真的。”这与“或”的常用英语用法不同,后者将是排他性的。

如果您希望所有条件同时为真,请使用AND

在与查询同时与多个条件进行比较时,使用IN而不是OR也更简单,更高效。

问题2

A prepared statement, `WHERE .. IN(..)` query and sorting — with MySQL

基本上,即使传入标量值,也应始终拥有数组:

$values = (array)$argument;
$conditions = implode(",", array_fill(0, count($values), "?");
// assuming you're using PDO
$stmt->execute($conditions);

答案 2 :(得分:0)

对于问题1,我认为@Ronald已经给你一个参考链接;

对于问题2,我认为你可以这样做:

public function myquery($condition){
    if is_string($condition){
         //do something to compose the query for string
    }

    if is_array($condition){
         //do something to compose the query for array
    }
}