2016-05-26 2 views
1

Die unter mysql queryVersuchen, 3 mysql Tabellen zu verbinden, aber ich bekomme nicht das erwartete Ergebnis. Was ist ein Fehler?

SELECT * 
FROM alerts_list l, alerts_data d, alerts_push_data p 
WHERE p.push_data_hash = d.alerts_data_hash 
AND p.push_data_alert_id = l.alerts_id 
AND d.alerts_data_id = l.alerts_id 
AND d.alerts_data_hash = 'JiaYRSVNZxgE' 

zeigt die Ergebnisse der JiaYRSVNZxgE von drei Tabellen verknüpft.

Hier sind die Tabellen, die ich verwenden und die Spalten, die ich zwischen ihnen eine Verbindung herstellen möchten:

Tisch alerts_list

Säule: alerts_id

enter image description here

Tisch alerts_push_data

Säule: push_data_alert_id

Säule: push_data_hash

enter image description here

Tabelle alerts_data

Säule: alerts_data_id

Säule: alerts_data_hash

enter image description here

Was ich will, erreichen ist:

verbinden push_data_alert_id mit alerts_id

verbinden alerts_data_id mit alerts_id

sondern zeigen nur die Ergebnisse, wo alerts_data_hash und push_data_hash ist "abcdef"

Leider führt meine Abfrage zu keinen Ergebnissen, aber es gibt Ergebnisse in der Realität. Was mache ich falsch?

+0

Ohne die Daten, die Sie erwarten, Ergebnisse zu liefern, gibt es nicht viel, die vorgeschlagen werden können. Anders als die Verwendung der ',' "Join" -Notation zu stoppen; es macht solche Abfragen viel schwieriger zu lesen, zu verstehen und zu erraten. – Uueerdo

+0

Können wir annehmen, dass alle verwendeten ID-Felder ganze Zahlen sind? – Uueerdo

+0

@Uueerdo ja alle re Ganzzahlen. überprüfe sie jetzt doppelt. – EnexoOnoma

Antwort

2

Sie konnten verwenden MySQL, dass der Betrieb ganz einfach wie so auszuführen JOINS:

  <?php 
      // USING NORMAL JOIN: 
      // WE NOW ADD AN EXTRA LAYER (THE VARIABLE $fldVal) 
      // IN THE CASE THAT YOUR VALUE ('JiaYRSVNZxgE') IS DYNAMIC... 
      $fldVal = 'JiaYRSVNZxgE'; 
      $sql = "SELECT DISTINCT * 
          FROM alerts_list l 
          JOIN alerts_data d ON d.alerts_data_id=l.alerts_id 
          JOIN alerts_push_data p ON p.push_data_alert_id=l.alerts_id 
          WHERE d.alerts_data_hash='" . $fldVal . "'"; 



      // USING LEFT JOIN: 
      // WE NOW ADD AN EXTRA LAYER (THE VARIABLE $fldVal) 
      // IN THE CASE THAT YOUR VALUE ('JiaYRSVNZxgE') IS DYNAMIC... 
      $fldVal = 'JiaYRSVNZxgE'; 
      $sql = "SELECT DISTINCT * 
          FROM alerts_list l 
          LEFT JOIN alerts_data d ON d.alerts_data_id=l.alerts_id 
          LEFT JOIN alerts_push_data p ON p.push_data_alert_id=l.alerts_id 
          WHERE d.alerts_data_hash='" . $fldVal . "'"; 



      // USING INNER JOIN: 
      // WE NOW ADD AN EXTRA LAYER (THE VARIABLE $fldVal) 
      // IN THE CASE THAT YOUR VALUE ('JiaYRSVNZxgE') IS DYNAMIC... 
      $fldVal = 'JiaYRSVNZxgE'; 
      $sql = "SELECT DISTINCT * 
          FROM alerts_list l 
          INNER JOIN alerts_data d ON d.alerts_data_id=l.alerts_id 
          INNER JOIN alerts_push_data p ON p.push_data_alert_id=l.alerts_id 
          WHERE d.alerts_data_hash='" . $fldVal . "'"; 

:: UND NOCH EIN NEUES UPDATE MIT GROUP BY-Klausel ::

 <?php 
      // WE NOW ADD AN EXTRA LAYER (THE VARIABLE $fldVal) 
      // IN THE CASE THAT YOUR VALUE ('JiaYRSVNZxgE') IS DYNAMIC... 
      $fldVal = 'JiaYRSVNZxgE'; 



      $sql2 = "SELECT DISTINCT * 
          FROM alerts_list AS A_LIST 
          LEFT JOIN alerts_push_data A_PUSH ON A_PUSH.push_data_alert_id=A_LIST.alerts_id 
          LEFT JOIN alerts_data A_DATA ON A_DATA.alerts_data_hash=A_PUSH.push_data_hash 
          WHERE A_DATA.alerts_data_hash='" . $fldVal . "' 
          GROUP BY A_LIST.alerts_id"; 

TEST- CASE QUERY

    SELECT DISTINCT * 
          FROM alerts_list AS A_LIST 
          LEFT JOIN alerts_push_data A_PUSH ON A_PUSH.push_data_alert_id=A_LIST.alerts_id 
          LEFT JOIN alerts_data A_DATA ON A_DATA.alerts_data_hash=A_PUSH.push_data_hash 
          WHERE A_DATA.alerts_data_hash='iSg2loGJDaWs' 
          GROUP BY A_LIST.alerts_id 

RESULT

Und diese sind nicht zu erwarten, weil ich nur zwei Zeilen in allen anderen Tabellen mit Ausnahme der alerts_list, die 10 Zeilen hat simuliert.

Ergebnis Dumping der Abfrage Above var_dump using the Query Above

Tabelle: alerts_list

Table: alerts_list

Tabelle: alerts_data Table: alerts_data

Tabelle: alerts_push_data Table: alerts_push_data

Verwandte Themen