Ich habe diese Anfrage:MySQL - Variable in WHERE-Klausel resultiert aus SELECT-Anweisung
INSERT INTO tab_reminder (ID_cliente, ID_articolo, Data_acquisto)
SELECT c.ID_cliente as cliente, ca.ID_articolo as articolo, MAX(c.Data_contratto) as ultimoAcquisto
FROM tab_contratti_articoli ca
LEFT JOIN tab_contratti c ON c.ID_contratto = ca.ID_contratto
LEFT JOIN tab_articoli a ON ca.ID_articolo = a.ID_articolo
LEFT JOIN tab_clienti cl ON c.ID_cliente = cl.ID_cliente
WHERE c.ID_cliente != 0
AND cl.ID_utente = 0
AND Giorni_reminder != 0
AND c.Data_contratto <= DATE_SUB('2017-05-16', INTERVAL Giorni_reminder DAY)
AND c.Data_contratto > DATE_SUB(DATE_SUB('2017-05-16', INTERVAL Giorni_reminder DAY), INTERVAL 60 DAY)
AND (c.Data_contratto NOT BETWEEN DATE_SUB('2017-05-16', INTERVAL Giorni_reminder DAY) AND '2017-05-16')
GROUP BY c.ID_cliente, ca.ID_articolo
ON DUPLICATE KEY UPDATE ID_cliente=ID_cliente, ID_articolo=ID_articolo, Data_acquisto=Data_acquisto, Articolo_visibile=Articolo_visibile;
Im Grunde ist es ärgert mich, dass ich DATE_SUB(DATE_SUB('2017-05-16', INTERVAL Giorni_reminder DAY)
Datum Ergebnis wiederholen.
Gibt es eine Möglichkeit, eine Variable in MySQL für dieses Datum zu deklarieren?
Etwas wie:
SET @newDate := DATE_SUB(DATE_SUB('2017-05-16', INTERVAL Giorni_reminder DAY);
Und dann ist es wie folgt verwenden:
AND c.Data_contratto <= @newDate
AND c.Data_contratto > DATE_SUB(@newDate, INTERVAL 60 DAY)
AND (c.Data_contratto NOT BETWEEN @newDate AND '2017-05-16')
Ich habe gesucht und für das, was ich gefunden habe, gibt es keine Möglichkeit oder es ist nicht Variablen erlaubt zu erklären oder Aliase in der WHERE
-Klausel, aber möglicherweise gibt es eine Problemumgehung, um zu vermeiden, dasselbe in derselben Abfrage mehrere Male einzugeben.
Wie immer, danke euch allen und habt einen schönen Tag!
Update 1:
Ich habe @ TimBiegeleisen den Link gesehen und ich finde es sehr, sehr interessant. Aber das Projekt, in dem ich arbeite, verwendet die veraltete mysql-API zur Abfrage. Siehe Beispiel:
$sqlExample = "SELECT * FROM tab_example";
$qExample = mysql_query($sqlExample) or die ("Error in $sqlExample: ".mysql_error());
$rsExample = mysql_fetch_object($qExample);
diese Unter Berücksichtigung, sind noch Prepared statements rentabel?
Zurück zu OP, ist es eine Möglichkeit, die Variable in der Abfrage zu deklarieren, wo ich es brauche (In WHERE
Klausel)?
Update 2:
Dies ist eine Klarstellung, warum dies: How to declare a variable in MySQL?
für mich funktioniert nicht oder ich bin nicht die Verwaltung es funktioniert.
Ich muss keine statischen Daten deklarieren, ich möchte eine Variable deklarieren, die Ergebnis eines SELECT ist.
Die Daten, die ich innerhalb der WHERE
Klausel speichern und weiter verwenden möchte, ist diese DATE_SUB('2017-05-16', INTERVAL Giorni_reminder DAY)
, ich entfernte die PHP-Variable, weil ich mich erinnern kann, kann Verwirrung schaffen.
Ist nur das Giorni_reminder
ist ein Ergebnis der SELECT und ich möchte es in WHERE-Klausel verwenden. Wenn Sie die Abfrage sehen, wiederhole ich das Gleiche mehrmals.
Ich wollte das vermeiden.
Also, so etwas wie das nicht für mich arbeiten:
SET @start = 1, @finish = 10;
Ich brauche etwas, wie in OP geschrieben. Wenn es möglich ist.
Wenn es nicht möglich ist, dann habe ich eine Lektion gelernt!: D
Kennen Sie mit [vorbereitete Anweisungen] gehört (http://php.net/manual/en/mysqli.quickstart.prepared-statements.php)? –
@TimBiegeleisen Nein, schau es dir jetzt an. Danke für den Link. Aber wir (in der Firma, in der ich arbeite) benutzen msqli im Moment nicht. – SrAxi
Interessant ... welche API benutzen Sie dann, um MySQL abzufragen? –