Mysql Einträge aus spalte Filtern anhand vorgegebener ID?


#1
Servus, bin aktuell am umstellen von einem mix aus Excel,WPDatatables usw auf eine Mysql Datenbank und passende suchen/hinzufügen scripte.
Das Hinzufügen Script läuft mittlerweile fast problemlos, das ist aber schon im php bereich Thema. Nun stehe ich vor dem problem, in der alten Struktur konnte ich einfach z.B. '.$row["LevelX"].' an gewünschter stelle eingeben um die dazugehörigen Daten abzurufen da alle in einer spalte waren.
Jetzt ist es aber so das ich für jeden Datensatz einen eigenen Eintrag habe.
Die Tabelle hat folgende Spalten:

+-------+------+------+-----+
| m2mID | KaID | KiID | LID |
+-------+------+------+-----+


$query = "SELECT * FROM card_chest_level_m2m WHERE KaID = '".$_POST["KartenIDs"]."'"; ist der "alte" query. Jetzt bräuchte ich aber sozusagen einen 3er Split von der KiID, die KiID hat nur 3 mögliche Werte, 1,2 oder 3. Quasi wenn KaID = '".$_POST["KartenIDs"]."' & KiID = 1 dann LID alle werte die übereinstimmen gruppiert ausgeben. Und das eben 3x für jede KiID um diese dann in meiner Übersicht ausgeben zu können in den gewünschten div's.
Hier sollen das ganze anwendung finden wenn man auf mehr drückt.

Mein knowhow ist sehr begrenzt und google hab ich auch schon Stunden genutzt, letztendlich drehe ich mich aber im kreis. Hab schon beiträge gefunden wo zu einem dreifachen while($row = mysqli_fetch_array($result)) geraten wurde anhand von $result1-3 oder einem dreifach query. Aber egal wie ich es drehe und wende, die ausgabe bleibt falsch. Jetzt bin ich mir unsicher ob ich das anhand eines Simplen Querys lösen kann oder ein riesiges Script brauche. Versuche das alles so gut wie möglich zu verstehen, aber so verstrickten kram hab ich bisher einfach für meinen kleinkram noch nicht benötigt. Falls es hier im DB Bereich falsch ist bitte nicht böse nehmen, bin mir halt wirklich unsicher ob es rein eine Query lösung gibt oder doch mehr nötig ist.
Vielen dank :)
 
#2
Wollte mal kurz einen kleinen Fortschritt einbringen. Ich weiß allerdings noch nicht ob das die richtige Herangehensweise ist bzw ob ich auf dem Holzweg bin. Aktuell rufe ich die Daten so ab und zeige sie an:
PHP:
$query = "SELECT

    KaID,
    KiID,
    GROUP_CONCAT(LID) AS K1
FROM
    card_chest_level_m2m
WHERE
    KiID = 1 AND KaID = '".$_POST["employee_id"]."'
UNION
SELECT
    KaID,
    KiID,
    GROUP_CONCAT(LID) AS K2
FROM
    card_chest_level_m2m
WHERE
    KiID = 2 AND KaID = '".$_POST["employee_id"]."'
UNION
SELECT
    KaID,
    KiID,
    GROUP_CONCAT(LID) AS K3
FROM
    card_chest_level_m2m
WHERE
    KiID = 3 AND KaID = '".$_POST["employee_id"]."'
ORDER BY
    KiID";   
      $result = mysqli_query($connect, $query);
      $output .= ' 
      <div class="table col-sm-12">'; 
      while($row = mysqli_fetch_array($result)) 
      { 
           $output .= '
                    <div class="col-md-12 ml-auto" align="center"><img id="Kimg" src="./Bilder/1.jpg"></div>
                <br />   
                     <div align="center"><img id="KIimg" src="./Bilder/K/Holz.png"></div>
                     <div id="hotext">'.$row["K1"].'</div>
                     <div align="center"><img id="KIimg" src="./Bilder/K/Gold.png"></div>
                     <div id="gtext">'.$row["K2"].'</div>
                     <div align="center"><img id="KIimg" src="./Bilder/K/Magie.png"></div>
                     <div id="mtext">'.$row["K3"].'</div>

Jetzt hab ich zwar schon mal alles gesammelt wie ich es bräuchte. Nur wirds dann bedingt durch den Loop schwer die dinge richtig anzuordnen mit den Bildern. Ich denke die Idee war ok, aber durch den Loop gibt er mir ja sogesehen die Daten immer an der <div id="hotext">'.$row["K1"].'</div> aus. Zwar passend Grupiert aber eben im Loop 3fach untereinander und beim K2 und K3 also an deren "ausgabestelle" landet nichts. Jetzt wollte ich nur mal nachfragen was die Profis meinen, ob das so in der Wunschumsetzung überhaupt sinnvoll ist.

Ich bräuchte es quasi so:

Bild von K1
Werte von K1

Bild von K2
Werte von K2

Bild von K3
Werte von K3
 
#3
Bei einem UNION sollten immer in allen SQLs alle Felder agegeben werden. In deinem Fall macht es aber keinen Sinn.
Es reicht eigentlich wenn du einen Case einbaust. Damit kannst du deine alte Darstellung simulieren
SQL:
select
    kaid,
    GROUP_CONCAT(case kiid when 1 then lid end) AS k1,
    GROUP_CONCAT(case kiid when 2 then lid end) AS k2,
    GROUP_CONCAT(case kiid when 3 then lid end) AS k3
from 
    card_chest_level_m2m
group by kaid
 
#4
Hey super vielen dank für deine Antwort. Wollte gerade schon schreiben das ich es gelöst bekommen habe, aber wohl auf dem unsichersten und umständlichsten wege der wohl möglich ist :D hab einfach an jeder stelle neu connected und den einzel query ausgeführt. Bestimmt die unsicherste Methode überhaupt. ;) werde direkt mal deine Antwort ausprobieren, dankeschön
 
#5
Kurzer nachtrag. Funktioniert super und wirkt gleich viel besser. Sieht halt schon merkwürdig aus wenn man für so ne simple abfrage X querys in der datei hat. Jetzt muss ich nur noch mal anders die KaID raus bekommen damit meine KaID bildausgabe wieder läuft und es passt. Frage mich zwar warum das so ist, da er ja die Level angaben richtig ausgibt pro Karte, aber komischweise die KaID nicht mehr "kennt" für mein
$pathx = "./Bilder/Karten/";
$file = $row["KaID"];
aber so hab ich wieder was zum Basteln vielen dank noch mal

--------------------------------------------------
kurzer edit/ läuft alles perfekt nun :)
 
Zuletzt bearbeitet: