我有一个名为fruits
的表格,其中包含字段fruit_id
,fruit_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;
答案 0 :(得分:1)
由于你显然使用了一种微妙的分类方案 - 黄色和绿色的芒果不同,但不知何故,西瓜只是一个甜瓜,你需要给你的水果一个“类别”和一个名字。然后,您可以选择不同的类别以仅获取类别列表。
答案 1 :(得分:1)
存储没有' water'部分。
如果这不是一个选项,您可以使用PHP http://php.net/str_replace或http://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