php - 返回一个在 MySQL 表中找不到的值?

标签 php mysql

假设有以下数组:

$users = array(
    // User ID => Username
    '72' => 'jack192',
    '23' => 'robert1984',
    '253' => 'mary111',
    '4' => 'jason92'
);

以及下表:

Table myTable:
username | colFoo | colBar

我想运行如下查询,但是我希望输出另外包含表中没有的列(数组中的用户 ID):

$user_string = implode("','", array_values($users));
$query = "SELECT username, colFoo, colBar FROM myTable WHERE username IN ('$user_string')";

这通常会输出如下内容:

Array
(
    [0] => Array
        (
            [username] => jack192
            [colFoo] => 98
            [colBar] => 7
        )

    [1] => Array
        (
            [username] => robert1984
            [colFoo] => 
            [colBar] => 2
        )

    [2] => Array
        (
            [username] => mary111
            [colFoo] => 41
            [colBar] => 9
        )

    [3] => Array
        (
            [username] => jason92
            [colFoo] => 46
            [colBar] => 13
        )
)

但是,我希望输出如下所示,其中 user_id 对应于原始数组中的键:

Array
(
    [0] => Array
        (
            [username] => jack192
            [colFoo] => 98
            [colBar] => 7
            [user_id] => 72
        )

    [1] => Array
        (
            [username] => robert1984
            [colFoo] => 
            [colBar] => 2
            [user_id] => 23
        )

    [2] => Array
        (
            [username] => mary111
            [colFoo] => 41
            [colBar] => 9
            [user_id] => 253
        )

    [3] => Array
        (
            [username] => jason92
            [colFoo] => 46
            [colBar] => 13
            [user_id] => 4
        )
)

我想我基本上只想将用户的 ID 输入到查询中并将其作为输出返回,而不需要 MySQL 对其做任何进一步的操作。是否可以纯粹使用 SQL 来完成此操作,而无需任何额外的 PHP 代码?


注意:我没有对从中提取此数据的数据库的写访问权限,并且我没有创建架构,因此我无法添加 user_id 字段或任何内容。

最佳答案

这是另一种方法,几乎​​是其他两个答案的混搭。您可以构建一个“假”表并将其JOINmyTable

SELECT t.username, t.colFoo, t.colBar, s.user_id 
FROM myTable t 
LEFT JOIN
   (
    SELECT 72 as user_id, 'jack192' as username
       UNION SELECT 23 as user_id, 'robert1984' as username
       UNION SELECT 253 as user_id, 'mary111' as username
       UNION SELECT 4 as user_id, 'jason92' as username
   ) s
ON t.username = s.username;

SQLFiddle 示例 - sqlfiddle.com/#!2/64650/2

可以通过 php foreach 循环创建fake表结构。

$select = '';
foreach ($users as $k => $v){
$select .=  "UNION SELECT $k as user_id, '$v' as username\n";
}
echo ltrim($select, "UNION ");

仍然是一个乏味且不理想的解决方案,但另一种选择。

关于php - 返回一个在 MySQL 表中找不到的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13773708/

相关文章:

php - 存储在数据库中的值

php - Wordpress 错误 "Invalid CSS"但引用的 CSS 不是我的 CSS

php - 从 Codeigniter 中的两个大表检索数据的最佳查询

php - 如何获取 GMT+01 :00 with php

mysql - 非常复杂的 Group By/Unique/Limit by SQL 命令

php - 在 SQL 中使用 PHP 变量

php - 通过 JSON 在 JS 中使用 PHP 方法?

mysql - 在同一列中按条件计数

mysql - 存档 AWS RDS mysql 数据库

javascript - 使用 CanvasJS 在图表中显示 Y 轴