按照另一列的顺序列出列中的所有值,并更改其中一个值的输出

时间:2014-03-17 13:52:13

标签: php mysql sql postgresql

我有一个名为fruits的表格,其中包含字段fruit_idfruit_name。我想按照fruit_id的顺序输出表中所有水果的名称,但对于“西瓜”,我只想输出“甜瓜”。对于所有其他水果,我想输出表格中的整个水果名称。

例如,如果我在表格中有这些数据:

fruit_id | fruit_name
---------|-----------
1        | apple
2        | guava
3        | yellow mango
4        | water melon
5        | cacao
6        | coconut
7        | green mango

我想输出:

apple
guava
yellow mango
melon
cacao
coconut
green mango

你怎么能获得这样的输出?

我试过

SELECT * 
FROM fruits
WHERE fruit_name
NOT IN 
(
 'apple',
 'guava',
 'yellow mango',
 'water melon',
 'cacao',
 'coconut',
 'green mango'
) 
ORDER BY fruit_name;

4 个答案:

答案 0 :(得分:1)

由于你显然使用了一种微妙的分类方案 - 黄色和绿色的芒果不同,但不知何故,西瓜只是一个甜瓜,你需要给你的水果一个“类别”和一个名字。然后,您可以选择不同的类别以仅获取类别列表。

答案 1 :(得分:1)

存储没有' water'部分。

如果这不是一个选项,您可以使用PHP http://php.net/str_replacehttp://www.php.net/explode删除第一个字。

可能的选择:

$sql = mysql_query("SELECT * FROM `fruits`");
while($row = mysql_fetch_array($sql)){
   echo str_replace('water', '', $row[0]);
}

答案 2 :(得分:1)

如果你想要给定列的所有值,除了用其他东西改变一个特定值,你可以使用REPLACE函数,它应用一个简单的字符串替换:

SELECT REPLACE(fruit_name, 'water melon', 'melon') 
FROM fruits 
ORDER BY fruit_id

一些注意事项:

  • REPLACE(x, y, z)搜索x的值,查找字符串y的任何出现,并将其替换为字符串z
  • 如果您希望结果包含 fruit_name 列标题,则需要将AS fruit_name添加到第一行的末尾,因为如果您要选择计算列(即函数的结果),默认情况下,列中的列没有名称。它不会根据您应用该功能的列的名称自动为结果中的列标题。那么,那将是:

    SELECT REPLACE(fruit_name, 'water melon', 'melon') AS fruit_name
    
  • 您的查询有ORDER BY fruit_name,但这会按字母顺序为您提供 fruit_name 字段的值。根据您的示例,您希望它们按ID的顺序。您可以按照您选择的列(例如SELECT column1, column2 FROM table ORDER BY column 3)列的顺序排序,所以只需按 fruit_id 排序列。

  • 您的查询将从示例表中返回任何结果。 WHERE column1 NOT IN (<list>)仅返回 column1 的值不等于列表中任何项目的记录。由于您的列表包含所有水果名称,因此您排除了所有内容。如果应用于更大的数据集,您将获得除这七个水果名称之外的所有。无论哪种方式,&#34;西瓜&#34;完全没有结果(苹果,番石榴,黄芒果等)。

答案 3 :(得分:1)

select case fruit_name when 'water melon' then melon else fruit_name end 
from fruits 
order by fruit_id