2016-03-27 23 views
0

Ich habe verschiedene Möglichkeiten versucht, dies zu tun, aber ... So, meine letzte Option, um Hilfe bitten.MySQLi aus mehreren Tabellen

Ich habe 3 DB-Tabellen. In der OBJEKT-Tabelle habe ich jede Website OBJECTS, wie Filternamen, SAM- und SAMP-Namen (systemspezifisch) gespeichert. In ITEMS habe ich alle Elemente für das System gespeichert (das sind reale Projekte mit einigen weiteren Optionen) und OBJECTS_LINKED, ich habe alle verknüpften Elemente mit OBJECTS und ITEMS gespeichert.

Dann habe ich System, wo Benutzer eine Option aus Filter auswählen können, dann habe ich Liste von Elementen ... Beispiel, in OBJECTS_LINKED Ich habe 3 Elemente mit Namen - Filter, diese werden gezeigt, aber was ich brauche Wo ist das Problem? Ich muss diese Elemente in der Liste anzeigen, wie OBJECTS-Name, der von ASC bestellt wird.

Im Moment funktioniert alles, außer Bestellung. Code ist in PHP geschrieben. Ich habe SQL-Abfrage, wo ich diese Artikel-ID bekam, wo der Name ist Filter von Objekten verknüpft, dann gibt es Schleife, wo ich alle Objekte ID wo Objektname ist SAM oder SAMP und es ist verknüpft mit Artikel-ID, bekam ich diese von OBJECTS LINKED und OBJECTS mit INNER JOIN ... Aber das Problem ist, dass wenn ich zuerst diese Item-ID bekam, dann wurden sie in eine Reihenfolge gebracht und in der nächsten Schleife zählt sie nicht meine SQL-QUERY ORDER BY, aber er geht wie Loop erzählt ... also, ich denke, das kann in einer Abfrage ohne diese Schleife gemacht werden, aber ich weiß nicht wie, weil ich nicht gut mit SQL bin.

 
---- OBJECTS ---- 
id - content  -  name 
1  - 1.2. Text -  SAM 
2  - 1.3. Text -  SAMP 
3  - 1.1. Text -  SAM 
4  - Filter  -  Filter 
 
---- ITEMS ---- 
id - some columns... 
1  - ... 
2  - ... 
3  - ... 
 
---- OBJECTS_LINKED ---- 
id - obj_id -  item_id - name 
id -  1  -  1  - SAM 
id -  2  -  1  - FILTER 
id -  4  -  2  - SAM 
id -  3  -  3  - SAMP 
 

    $SQL = "SELECT * FROM OBJECTS_LINKED WHERE obj_id = '$obj_id' AND link_name = 'FILTER'"; 
    while(){ 
    $SQL = "SELECT ol.*, o.obj_content, i.item_type, i.item_kartina FROM OBJECTS_LINKED AS ol 
    INNER JOIN ITEMS AS i ON i.item_id = ol.item_id 
    INNER JOIN OBJECTS AS o ON o.obj_id = ol.obj_id 
    WHERE ol.item_id = '$item_id' AND if(i.item_type = 'SAM', link_name = 'SAM', link_name = 'SAMP') 
    ORDER BY o.obj_content ASC"; 
     while(){ 
     ---- list of items (SAM or SAMP) name ---- 
     }  
    } 

+0

Ist die Variable $ Item_id in Ihrem zweiten Abfrageergebnis der ersten Abfrage? – Reversal

+0

Erwägen Sie, den vollständigen Code hinzuzufügen: Die Art, wie Sie Ihren Code gezeigt haben, ist nur verwirrend und hilft uns nicht weiter. – Reversal

+0

@Reversal ja, es ist – brass

Antwort

0

Ich habe es getan, aber wenn jemand, wie man wissen möchte, so poste ich hier meine Lösung.

$SQL = "SELECT ol.*, o.obj_content, i.item_type, i.item_kartina 
FROM OBJECTS_LINKED AS ol 
INNER JOIN ITEMS AS i ON i.item_id = ol.item_id 
INNER JOIN OBJECTS AS o ON o.obj_id = ol.obj_id 
WHERE ol.item_id IN (SELECT item_id FROM OBJECTS_LINKED WHERE obj_id = '$obj_id' AND link_name = 'FILTER') AND if(i.item_type = 'SAM', link_name = 'SAM', link_name = 'SAMP') 
ORDER BY o.obj_content ASC"; 
    while(){ 
     /* LIST OF ITEMS ORDERED BY obj_content from OBJECTS table WHERE OBJECTS and ITEMS are linked */ 
    }