假设有以下数组:
$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
字段或任何内容。
最佳答案
这是另一种方法,几乎是其他两个答案的混搭。您可以构建一个“假”表并将其JOIN
到myTable
。
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/