2016-07-29 8 views
0

Meine Variablen sind wie folgt festgelegt:Wie lege ich eine Variable in MySql fest, die während meiner Abfrage nicht zurückgesetzt wird?

SET @start_date = '2015-07-20'; 
SET @end_date = '2016-06-30'; 

Meine Frage wie folgt aussieht:

SELECT a.user_id, a.school_id, COUNT(a.log_id) logs 
FROM table1 a 
JOIN tbl2 b ON a.log_id = b.log_id 
JOIN users u ON a.user_id = u.user_id 
WHERE DATE(log_date) BETWEEN @start_date AND @end_date 
AND b.column2 = 123 
GROUP BY a.user_id, b.school_id; 

Tabellen 1 und 2 sind beide sehr sehr große Tabellen, so dauert die Abfrage eine sehr lange Zeit zu laufen Das ist für meine Zwecke in Ordnung. Das Problem ist, dass meine Variablen während der Abfrage irgendwie zurückgesetzt werden, so dass die Ergebnisse leer sind. Meine Frage ist, gibt es eine Möglichkeit, die Variablen so festzulegen, dass sie während der Abfragen nicht auslaufen?

Alle Ideen würden wirklich geschätzt werden!

+1

Session-Variablen zurückgesetzt selbst nicht, sollten sie für die gesamte Lebensdauer der Verbindung bestehen bleiben. – Uueerdo

+0

Ich testete mit dem Einstecken der tatsächlichen Daten anstelle der Verwendung von Variablen und es gab Ergebnisse zurück, so etwas passiert mit den Variablen während der Abfrage. Wenn ich SELECT @ start_date ausführen möchte, nachdem die Abfrage eine leere Menge zurückgegeben hat, wird NULL zurückgegeben. – user6655061

+2

Das würde normalerweise anzeigen, dass Ihre Verbindung zurückgesetzt wird; Eine normale SELECT-Anweisung, die den Variablen nicht zugewiesen wird, sollte ihre Werte nicht beeinflussen. Wie führst du die Sätze und Fragen aus? – Uueerdo

Antwort

0

Das ist ein seltsames Problem. Wenn Sie Ihre Abfrage so optimieren, dass sie schneller ausgeführt wird, ist das Problem möglicherweise behoben. Verwenden Sie ‚UND‘ und nicht als ‚WHERE‘, wenn Sie Ihre großen Tabellen beitreten:

SELECT a.user_id, a.school_id, COUNT(a.log_id) logs FROM table1 a JOIN tbl2 b ON a.log_id = b.log_id JOIN users u ON a.user_id = u.user_id AND DATE(log_date) BETWEEN @start_date AND @end_date AND b.column2 = 123 GROUP BY a.user_id, b.school_id; 
+0

Danke, aber das hat nicht funktioniert, weil die Tische so groß sind ... – user6655061

Verwandte Themen