在MySQL中,您可以将一列中的值字符串转换为另一列中的相应值吗?

时间:2016-04-06 17:59:19

标签: php mysql

假设我在表格中有数据"人们"结构如下:

userid   | fname      | lname       | favfruit
----------------------------------------------
001      | Joe        | Blow        | banana
002      | Jim        | Crow        | orange
003      | Bozo       | Joe         | grapes
004      | Mo         | Fo          | lemon
005      | Back       | Hoe         | peach
006      | Barack     | O           | peach
007      | J          | Lo          | grapes
008      | Yo         | Lo          | lemon
009      | Hell       | No          | orange
010      | Steve      | Jobs        | apple

现在我给出了一系列用户ID:

007,001,009,003,010

是否有一个MySQL查询会返回相应的favfruits字符串?:

grapes,banana,orange,grapes,apple

我的另一种方法是在每个用户ID的循环中查询表,这似乎是超级的:

<?
$string = "007,001,009,003,010";
$userids = explode(",",$string);
foreach($userids as $id) {
  $query = "SELECT favfruit FROM people WHERE userid='$id'";
  $res = mysql_query($query);                    <-- deprecated, i know.
  $fruits[] = mysql_result($res,0,"favfruit");   <-- just to illustrate. :)
}
$newstring = implode(",",$fruits);  // = grapes,banana,orange,grapes,apple
?>

是否有更好的(单一查询)方法?

3 个答案:

答案 0 :(得分:2)

如果您需要useridfavfruit之间的对应关系,我首选的方法是在结果中将它们连接起来。

SELECT GROUP_CONCAT(',', CONCAT(userid, ':', favfruit) AS users_and_fruits
FROM people
WHERE userid IN ('007','001','009','003','010');

这将返回一个字符串,如:

007:grapes,001:banana,009:orange,003:grapes,010:apple

然后你可以爆炸并爆炸每个项目以获得对应关系。

如果您不想要这个,只想要一个与原始列表顺序相同的列表,请使用ORDER BY FIELD

SELECT GROUP_CONCAT(favfruit ORDER BY FIELD(userid, '007','001','009','003','010')) AS favfruits
FROM people
WHERE userid IN ('007','001','009','003','010');

在所有这些查询中,请确保引用用户ID,因为数字上的前导零被丢弃并且无法正确匹配(或将userid列更改为INT)。

答案 1 :(得分:1)

试试这个:

SELECT GROUP_CONCAT(favfruit
                ORDER BY favfruit ASC SEPARATOR ', ') AS favfruit
FROM people
WHERE userid IN (007,
                 001,
                 009,
                 003,
                 010);

您可以ORDERBY userid。只需将favfruit userid替换为GROUP_CONCAT

答案 2 :(得分:0)

SELECT favfruit FROM people where userid in (007,001,009,003,010);

@Md Mahfuzur Ra​​hman的回答将返回一个字符串。这个将返回每个水果的结果集。