提问人:Derek Brazil 提问时间:9/24/2019 最后编辑:Derek Brazil 更新时间:9/24/2019 访问量:31
为字段分配名称 SQL
Assigning names to fields SQL
问:
我问了一个快速的问题,我一直在努力解决这个挑战(为了我自己的利益)。
如何在选择表中的所有列后设置字段的名称。
请参阅下面的代码片段
SELECT *
FROM `random$table`
LEFT JOIN users AS u AND u.username AS title ON u.rank > 4
WHERE u.username = 'exploit'
GROUP BY `id` LIMIT 1
正如您从上面的片段中看到的那样,我正在尝试在 LEFT JOIN 之后为字段分配一个给定的名称。
和 u.username 作为标题
我找不到与此问题相关的任何其他问题,如果有,请标记为重复。
旁注:查询易受攻击是有原因的
谢谢亲切的问候
答:
0赞
Anton
9/24/2019
#1
查询后无法执行此操作。而是在 SELECT 表达式中设置别名。也许你需要某种映射,以便根据你的$table值和 field=>alias 匹配的$array,你将其与 join(',', $array) 一起放入 SELECT 表达式中。
像这样的东西:
function mapFields($table) {
$mapping = [];
switch($table) {
case 'abc': {
$mapping = [
$table.'.id' => 'id',
$table.'.rank' => 'rank',
$table.'.title' => 'title'
];
}
case 'xyz': {
$mapping = [
$table.'.id' => 'userId',
$table.'.username' => 'username',
$table.'.email' => 'userEmail'
];
}
}
return array_map(
function($k, $v){return "$k as $v";},
array_keys($mapping),
$mapping
);
}
$mapping = mapFields('random'.$table);
// do propper checks if the mapping array is empty or so
$select = join(',', $mapping);
SELECT $select
FROM `random$table`
评论
0赞
Derek Brazil
9/24/2019
你能详细说明一下吗,也许添加一个代码片段,我不太明白你的答案。有关其他信息,请参阅下文。有效载荷 如果这有帮助1` LEFT JOIN users AS u AND u.username AS title ON u.rank > 4 WHERE u.username = 'exploit' GROUP BY `id
0赞
Derek Brazil
9/24/2019
我只能控制$table,无论如何都必须有SELECT *
0赞
Anton
9/24/2019
也许这可以给你一些想法
评论