将多个查询组合到一个输出数组中以进行JSON编码。最好的方法?

时间:2013-01-28 22:30:07

标签: php android mysql web-services

好的,到目前为止我已经尝试使用UNION ALL并将其压缩为一个查询,但是我的数组键工作不正常。

起初我试过这个:

    $query = "SELECT student_no AS test
            FROM student
            WHERE student_no='$studentno' AND password='$password'
            UNION ALL
            SELECT group_id AS group_id
            FROM student_group
            WHERE student_no='$studentno'
            UNION ALL
            SELECT leader AS leader
            FROM team
            WHERE leader='$studentno'";

但是它返回了student_no:student_no,student_no:group_id和student_no:leader。

它将所有键填充为student_no,即第一个查询。或者如上所述,在尝试使用AS强制测试时进行测试。

我已经通过运行查询三次并将结果填充到数组三次来实现它,但它实际上在大小代码方面增长了三倍,现在感觉非常低效。

请记住,这是一个大学项目,但由于我已经掌握了解决方案,并了解所发生的事情的基础知识,我认为可以提前发布。

以为我会添加它现在返回的实际JSON:

[
   {
      "student_no":"testing"
   },
   {
      "group_id":"testio"
   },
   {
      "leader":"teeesstt"
   }
]

1 个答案:

答案 0 :(得分:0)

这不是UNION直接可行的,因为MySQL doc解释了:

  

第一个SELECT语句中的列名用作返回结果的列名

可能的是:

$query = "SELECT 'student_no' AS key, student_no AS value
        FROM student
        WHERE student_no='$studentno' AND password='$password'
        UNION ALL
        SELECT 'group_id',group_id
        FROM student_group
        WHERE student_no='$studentno'
        UNION ALL
        SELECT 'leader',leader
        FROM team
        WHERE leader='$studentno'";

您将获得第一列中的索引和第二列中的值。

我认为这不比做3个查询更好......