mysql CASE SELECT值AS ValueX(1,2,3)取决于另一列中的值

时间:2014-08-16 07:34:26

标签: mysql case

TopicName    | TopicUrl | MainTopicName
------------------------------
1stSubtopic  | url1     | MainOne
2ndSubtopic  | url2     | MainTwo
3rdSubtopic  | url3     | MainOne

结果想得到2个php数组

一个数组$MainOne

(
[TopicName1] => 1stSubtopic
[TopicUrl1] => urll
)
(
[TopicName1] => 3rdSubtopic
[TopicUrl1] => url3
)

另一个数组$MainTwo

(
[TopicName2] => 2ndSubtopic
[TopicUrl2] => url2
)

可以访问$array_from_mysql[1]['TopicName1']$array_from_mysql[2]['TopicName2']

等值

可以写两个SELECT语句,例如SELECT TopicName, TopicUrl from table WHERE MainTopicName = ?

但如果有许多MainTopicName,例如MainOneHundred,那么SELECT就不会很好解决。

但是如何使用CASE或其他方式呢?

以下(可能)不正确,但我只想了解想法

CASE MainTopicName

WHEN MainTopicName = MainOne THEN SELECT TopicName AS TopicName1
WHEN MainTopicName = MainOne THEN SELECT TopicUrl AS TopicUrl1

WHEN MainTopicName = MainTwo THEN SELECT TopicName AS TopicName2
WHEN MainTopicName = MainTwo THEN SELECT TopicUrl AS TopicUrl2

使用CASE代替多个SELECT语句的正确陈述是什么?

2 个答案:

答案 0 :(得分:0)

我不完全确定你在问什么,但也许这就是你想要的:

SELECT MainTopicName, GROUP_CONCAT(TopicName) AS TopicNames, GROUP_CONCAT(TopicUrl) AS TopicUrls
FROM YourTable
GROUP BY MainTopicName

TopicNamesTopicUrls将以逗号分隔的名称和网址列表。

答案 1 :(得分:0)

所以你想要所有偶数或所有奇数行?

您可以添加id列作为代理键,然后获取每个偶数或奇数行:

SELECT TopicName, TopicUrl FROM table WHERE id % 2 = 0

(导致所有偶数行。= 1会给你奇数行。)