2015-07-02 90 views
3

有表像這樣:列表用戶可以通過程序

用戶:

CREATE TABLE `affiliate__model__user_node` (
`id` bigint(20) NOT NULL AUTO_INCREMENT, 
`user_id` bigint(20) DEFAULT NULL, 
PRIMARY KEY (`id`) 
) ENGINE=InnoDB 

程序:

用戶使用程序:

CREATE TABLE `affiliate__model__user_program` (
`user_id` bigint(20) NOT NULL DEFAULT '0', 
`program_id` bigint(20) NOT NULL DEFAULT '0', 
`username` varchar(255) NOT NULL, 
PRIMARY KEY (`user_id`,`program_id`) 
) 

如何有效列表中的用戶屬於特定的程序米,像這樣?

user_id | program 1 | program 2 | program 3 | program N .... 
--------------+-----------+-----------+-----------+-----------   
     1 |  Y  |  N |  N |  Y 
     3 |  N  |  N |  N |  N 
     7 |  N  |  Y |  N |  N 
     12 |  Y  |  Y |  Y |  Y 
     n |  N  |  N |  N |  Y 

(節目數可以根據program表數據改變,但它不限於〜20)。

回答

0

您可以嘗試使用下面的查詢:

SELECT 
    user.user_id, 
    IF(program.name = 'program 1', 'Y', 'N') AS 'program 1' 
    IF(program.name = 'program 2', 'Y', 'N') AS 'program 2' 
    IF(program.name = 'program 3', 'Y', 'N') AS 'program 3' 
    ... 
FROM affiliate__model__user_node user 
INNER JOIN affiliate__model__user_program model 
ON user.id = model.user_id 
INNER JOIN affiliate__model__program program 
ON model.program_id = program.id 

對於〜20分方案列這不會贏得一個獎是最漂亮的查詢,但它應該完成這項工作。

+0

@Sfisioza請查看我的答案,並讓我們知道它是否解決了您的問題。 –

+0

無論是「Y/N」還是「0」或「1」,或null/program_id,這都不重要。重點是列的數量應該是動態的(取決於輸入到「程序」表中的數據。 – Sfisioza

相關問題