suchen

Heim  >  Fragen und Antworten  >  Hauptteil

PHP-SQL-Abfrage zum Aufteilen mehrerer Spalten (in derselben Zeile) in separate Zeilen

<p>Ich habe eine Tabelle, in der die Testergebnisse der Schüler aufgeführt sind. Jede Zeile enthält eine Studenten-ID und es gibt Spalten, wobei jede Spalte ein individuelles Testergebnis darstellt. Jetzt muss ich eine Abfrage erstellen, die es mir ermöglicht, eine separate Zeile für den Studentenausweis zu sehen, der jedem Testergebnis entspricht. Ich habe Stack Overflow nach dem besten Ansatz durchsucht, aber keinen gefunden, der effizient aussieht. Ich habe den unten aufgeführten Code für einen Schüler (1000002) geschrieben, aber er scheint für das, was ich erreichen möchte, zu komplex zu sein und funktioniert nur für drei Testergebnisse, sodass ich mehr Code hinzufügen muss, um alle 16 Punkte zu erhalten. Gibt es eine einfache Möglichkeit, dies mit einer einzelnen Abfrage zu tun (bevorzugt) oder muss ich die Zeilen extrahieren und dann eine Schleife verwenden, um aus jedem Element ein Array zu erstellen (zweite bevorzugt)? </p> <pre class="brush:php;toolbar:false;">SELECT scores_uid , Punktzahl1 AUS Assessment_scores WHERE fk_assigned_uid = '1000002' UNION ALLE WÄHLEN scores_uid , Punktzahl2 AUS Assessment_scores WHERE fk_assigned_uid = '1000002' UNION ALLE WÄHLEN scores_uid , Punktzahl3 AUS Assessment_scores WHERE fk_assigned_uid = '1000002';</pre> <p><br /></p>
P粉336536706P粉336536706566 Tage vor437

Antworte allen(1)Ich werde antworten

  • P粉908643611

    P粉9086436112023-07-28 17:42:24

    理想情况下,你应该有类似这样的结构:

    students

    • id
    • name

    tests

    • id
    • number

    test_results

    • id
    • student_id
    • test_id
    • result

    这样你就可以在一个查询中获取学生的所有结果。

    SELECT test_results.result AS Result,
     students.name as Student,
     tests.number as Testnumber 
    FROM test_results 
    LEFT JOIN students ON students.id = test_results.student_id
    LEFT JOIN tests ON tests.id = test_results.test_id
    WHERE student_id = {{id}}

    Antwort
    0
  • StornierenAntwort