如何在MySQL中为相同的查询参数返回相同的值?

时间:2014-05-06 14:03:15

标签: php mysql sql

我有一些使用PDO构建和执行查询的PHP。查询从users表中获取用户名和用户图像,并在PHP for循环中从数组中添加ID参数。因此,一旦构建完成,查询看起来就像这样:

SELECT username, image FROM users WHERE id=4 OR id=2 OR id=16 OR id=8 OR id=9;

PHP期望从查询返回多少行,因为插入了ID值。当所有ID都是唯一的时,这很好用,但是当查询中有相同的ID时,MySQL(高效地)只为每个唯一ID返回一行,如下所示。

SELECT username, image FROM users WHERE id=4 OR id=2 OR id=2 OR id=4 OR id=2;

此查询只返回2行,一行用于ID为4的用户,另一行用于用户ID 2.正如我所说,应用程序需要返回多少行作为提交的ID参数,因此这是一个问题。是否有不同的方法来表达我的SQL查询以强制它返回相同的行?

3 个答案:

答案 0 :(得分:1)

让您的应用程序通过取出重复项来优化输入数据。因此,只会发送两个ID,两行将满足预期。

答案 1 :(得分:0)

您可以过滤数组,仅采用唯一值,然后在查询中使用IN:

<?php
$array = array(2, 3, 4, 5, 5, 5, 4, 3, 2, 1);
$array = array_unique( $array );

// when only numeric values
$values = implode(",", $array );

// when strings
//$values = "'" . implode("','", $array ) . "'";

$query = 'SELECT username, image FROM users WHERE id IN( ' . $values . ')';

?>

答案 2 :(得分:0)

获取数组中每个值的频率。 之后,创建一个循环并编写一个带有每个id限制的查询,然后联合所有查询。

<?php
$array = array(2, 4, 2, 2, 4);
$values = array_count_values($array);

$query = array();

foreach ($values as $id => $frequency)
{
    $query[] = "SELECT username, image FROM users WHERE id = {$id} LIMIT {$frequency}";
}

$query = implode(" UNION ", $query);