从现有值

时间:2015-08-02 22:26:03

标签: mysql phpgrid

我是非常新的,所以如果我能澄清,请告诉我。本质上,我希望基于现有表中的列的值在mysql视图中创建一个新列。我使用phpGrid在前端输出。

例如 - 让我们说我已经有了question_id列:

    name | question_id | answer
----------------------------------
    Joe  | 1           | yes
    Joe  | 2           | no
    Ann  | 1           | maybe
    Ann  | 2           | kinda

我有自定义视图my_view,我希望列在这里(不一定在前面有question_id=,但无论如何都有效):

    name  | question_id=1 | question_id=2
------------------------------------------
    Joe   | yes           | no
    Ann   | maybe         | kinda

或者那种效果。如何将question_id值变为列,并将答案放在正确的位置?

另外,如果name来自一个表格,而question_id来自另一个表格,那么如何才能在my_view中将正确关联的值并排放在一起? name值通常具有重复值,但它们具有单独的条目ID。

干杯谢谢!

编辑: Create MySQL view using distinct values as columns是正确的想法,但我收到有关错误语法的错误#1064。

另外,我不确定它是否解决了通过唯一条目ID获取数据的第二个问题。我尝试使用这个:1052: Column 'id' in field list is ambiguous来修复模棱两可的问题,但后来我发现错误#1060有重复。

编辑2:以下是我尝试从两个单独的表中获取列的代码,包括两者中共享的registration_id列。我从上面的帖子中得到了关于解决模糊问题的代码:

CREATE VIEW access AS
    SELECT fname,lname,email,city,state,country_id,phone,payment_status,event_id,wp_events_attendee.registration_id,wp_events_answer.registration_id,question_id,answer
    FROM wp_events_answer
    JOIN wp_events_attendee ON wp_events_attendee.registration_id = wp_events_answer.registration_id 

它给了我"#1060 - 重复的列名称' registration_id'"。也不确定如何将其集成到Create MySQL view using distinct values as columns中看到的代码中。我试着做一个测试:

  CREATE VIEW access AS
SELECT
    fname,lname,email,city,state,country_id,phone,payment_status,event_id,wp_events_attendee.registration_id,wp_events_answer.registration_id,question_id,answer,registration_id,
    MAX(IF(question_id = '1', status, NULL)) FIRST,
    MAX(IF(question_id = '11', status, NULL)) DOB,
FROM wp_events_answer, wp_events_attendee
JOIN wp_events_attendee ON wp_events_attendee.registration_id = wp_events_answer.registration_id 
GROUP BY registration_id;

但得到了#34;#1064 - 你的SQL语法出错了;查看与您的MySQL服务器版本相对应的手册,以便在' FROM wp_events_answer附近使用正确的语法,wp_events_attendee GROUP BY registration_id'在第6行"。谢谢!

2 个答案:

答案 0 :(得分:0)

我对sql视图知之甚少,但是在连接表时,查询中似乎存在问题。

如果您需要加入3个表,请按照以下查询。

SELECT `table1`.`column1`,`table2`.`column2` 
FROM `table1` 
JOIN `mapping_table` 
JOIN `table2` 
ON `table1`.`table1_id`=`mapping_table`.`table1_foreign_key` 
AND `mapping_table`.`table2_foreign_key`=`table2`.`table2_id` 
GROUP BY `table1`.`group_column` 

希望这可以帮助您创建所需的视图

答案 1 :(得分:-1)

假设您事先知道问题ID,可以通过一堆UNIONS来实现 - http://sqlfiddle.com/#!9/00a0c/8

我担心我需要一些示例数据来回答您问题的第二部分。

更新 - 我没有意识到额外的行是个问题。以下SQL小提琴解决了这个问题。

http://sqlfiddle.com/#!9/0f8c7/2