0

好的,到目前为止,我已经尝试过使用 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 强制它们时进行测试。

我通过运行查询 3 次并将结果填充到数组中 3 次来使其工作,但实际上它的大小代码明智地增长了 3 倍,现在感觉效率很低。

请记住,这是针对大学项目的,但是由于我手头已经有了解决方案并了解了正在发生的事情的基础知识,因此我认为可以提前发布。

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

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

1 回答 1

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 个查询更好......

于 2013-01-29T01:51:57.807 回答