1

我对此非常陌生,所以如果我能澄清一下,请告诉我。本质上,我希望根据现有表中列的值在 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_viewname值通常有重复项,但它们有单独的条目 ID。

干杯和感谢!

编辑: 使用不同的值作为列创建 MySQL 视图是正确的想法,但我收到错误 #1064 关于不正确的语法。

此外,我不确定它是否解决了第二个问题,即通过唯一条目 ID 对齐数据。我尝试使用它:1052:字段列表中的列“id”不明确以解决不明确的问题,但随后出现错误 #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'”。也不确定如何将其集成到使用不同值作为列创建 MySQL 视图中看到的代码中。我试着做一个测试:

  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;

但是得到“#1064 - 您的 SQL 语法有错误;请查看与您的 MySQL 服务器版本相对应的手册,以获取正确的语法,以便在第 6 行的 'FROM wp_events_answer, wp_events_attendee GROUP BY registration_id' 附近使用”。谢谢!

4

2 回答 2

-1

我对 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` 

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

于 2015-08-03T10:56:53.137 回答
-2

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

恐怕我需要一些样本数据来回答你问题的第二部分。

更新 - 我没有意识到额外的行是一个问题。下面的 SQL fiddle 解决了这个问题。

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

于 2015-08-02T22:34:58.223 回答