2017-09-26 2 views
0

Ich habe eine Tabelle 4 Spalten folgenden Eigenschaften:Mysql & Laravel Multiple where-Klausel auf 2 Spalten

Id Name Activity Date 

Ein Name kann mehrere Einträge haben, wie jedes Mal jemand eine Aktivität stattfindet, wird es mit dem Namen, Aktivität eingefügt werden und dieses bestimmte Aktivitätsdatum.

Ich möchte eine Abfrage haben, wo:

alle Namen erhalten, der alle folgenden Aktivitäten getan haben auf

Aktivität vom erwähnten = laufen und date = 12/03/2015

Aktivität = Tanz und date = 10/01/2015

Aktivität = lesen und date = 26/05/2015

Beachten Sie, dass die Aktivität Kombinationen in wo ch Ange von Minimum 1 bis Maximum 10-12

Wie kann ich das effektiv machen? auch einen besseren Weg, es auf mysql roh zu tun?

Antwort

0

Sie haben drei Bedingungen. Wenn also die Anzahl der Zeilen, die Ihren Bedingungen entsprechen, gleich ist, erhalten Sie den Namen.

SELECT name, count(*) as match_count FROM names WHERE (name = 'run' AND 'date' = '12/03/2015') OR (name = 'dance' AND 'date' = '10/01/2015') OR (name = 'dance' AND 'read' = '26/05/2015') GROUP BY name 

if($result->match_count == $numberOfConditions) 
    $result->name 

Oder überprüfen Sie es (die if-Anweisung) in der Abfrage

SELECT name, count(*) as match_count FROM names WHERE (name = 'run' AND 'date' = '12/03/2015') OR (name = 'dance' AND 'date' = '10/01/2015') OR (name = 'dance' AND 'read' = '26/05/2015') GROUP BY name HAVING match_count = 3 
+0

Danke, aber ich möchte etwas wie und wo. Also müssen alle where-Klauseln übereinstimmen. –

+0

In Ihrer Abfrage gibt es die Ergebnisse, wenn eine der WHERE-Klausel erfolgreich ist, ich möchte Namen erhalten, die alle diese Aktivitäten durchgeführt hat und jede Aktivität nur an diesem Tag sein muss: | –

+0

Also sollte es in mehreren Zeilen sein. Recht? –