0

わかりました、これまでUNION ALLを使用して1つのクエリに圧縮することでこれを試しましたが、配列キーは正しく機能していませんでした.

最初に私はこれを試しました:

    $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

MySQL docで説明UNIONされているように、これは では直接可能ではありません。

最初の 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'";

最初の列でインデックスを取得し、2 番目の列で値を取得します。

ただし、3つのクエリを実行するよりも優れているとは思いません...

于 2013-01-29T01:51:57.807 に答える