La clausola WHERE
è fuori luogo, si deve seguire i riferimenti di tabella e operazioni di JOIN.
Qualcosa di simile a questo:
FROM tartikel p1
JOIN tartikelpict p2
ON p1.kArtikel = p2.kArtikel
AND p2.nNr = 1
WHERE p1.dErstellt >= DATE(NOW()) - INTERVAL 7 DAY
ORDER BY p1.kArtikel DESC
EDIT (tre anni più tardi)
È possibile che risponde essenzialmente alla domanda "ho cercato di aggiungere una clausola WHERE per la mia strategia e ora la query restituisce un errore, come posso risolverlo? "
quanto a una domanda sulla scrittura di una condizione che controlla un intervallo di date di "ultimi 7 giorni" ...
Che in realtà dipende l'interpretazione delle specifiche, quali il tipo di dati della colonna della tabella è (DATA o DATETIME) e quali dati sono disponibili ... cosa deve essere restituito.
Per riassumere: l'approccio generale è identificare un "inizio" per l'intervallo data/datetime e "fine" di tale intervallo e fare riferimento a quelli in una query. Consideriamo qualcosa di più facile ... tutte le righe per "ieri".
Se la nostra colonna è di tipo DATE. Prima incorporiamo un'espressione in una query, siamo in grado di provarlo in una semplice SELEZIONA
SELECT DATE(NOW()) + INTERVAL -1 DAY
e verificare il risultato restituito è quello che ci aspettiamo. Poi possiamo usare la stessa espressione in una clausola WHERE, paragonandola a una colonna data così:
WHERE datecol = DATE(NOW()) + INTERVAL -1 DAY
per una colonna DATETIME o TIMESTAMP, possiamo usare >=
e <
confronti disuguaglianza per specificare un intervallo
WHERE datetimecol >= DATE(NOW()) + INTERVAL -1 DAY
AND datetimecol < DATE(NOW()) + INTERVAL 0 DAY
Per "ultimi 7 giorni" abbiamo bisogno di sapere se ciò significa da questo punto in questo momento, indietro 7 giorni ... ad esempio ultimi 7 * 24 ore, tra la componente temporale nel confronto, ...
WHERE datetimecol >= NOW() + INTERVAL -7 DAY
AND datetimecol < NOW() + INTERVAL 0 DAY
ultimi sette giorni completi, esclusi oggi
WHERE datetimecol >= DATE(NOW()) + INTERVAL -7 DAY
AND datetimecol < DATE(NOW()) + INTERVAL 0 DAY
o passato sei giorni completi più finora oggi ...
WHERE datetimecol >= DATE(NOW()) + INTERVAL -6 DAY
AND datetimecol < NOW() + INTERVAL 0 DAY
consiglio testare le espressioni sul lato destro in un'istruzione SELECT, possiamo usare una variabile definita dall'utente al posto di NOW() per il test, non essendo legato a quello NOW() restituisce in modo che possiamo testare i confini, oltre i confini di settimana/mese/anno e così via.
SET @clock = '2017-11-17 11:47:47' ;
SELECT DATE(@clock)
, DATE(@clock) + INTERVAL -7 DAY
, @clock + INTERVAL -6 DAY
Una volta che abbiamo espressioni che restituiscono valori che lavorano per "Start" e "End" per il nostro particolare caso d'uso, ciò che intendiamo per "ultimi 7 giorni", possiamo usare quelle espressioni nei confronti gamma del Dove la clausola.
(Alcuni sviluppatori preferiscono usare i DATE_ADD
e DATE_SUB
funzioni al posto della sintassi + INTERVAL val DAY/HOUR/MINUTE/MONTH/YEAR
.
e MySQL fornisce alcune comode funzioni per lavorare con la data, DATETIME TIMESTAMP e tipi di dati ... DATA, LAST_DAY,
Alcuni sviluppatori preferiscono calcolare l'inizio e la fine di altri codici, e letterali stringa di approvvigionamento nella query SQL, in modo che la query inviata al database è
WHERE datetimecol >= '2017-11-10 00:00'
AND datetimecol < '2017-11-17 00:00'
E anche questo approccio funziona. (La mia preferenza sarebbe quella di lanciare in modo esplicito quelle stringhe letterali in DATETIME, sia con CAST, convertire o solo il trucco + INTERVALLO ...
WHERE datetimecol >= '2017-11-10 00:00' + INTERVAL 0 SECOND
AND datetimecol < '2017-11-17 00:00' + INTERVAL 0 SECOND
Il soprattutto assume abbiamo memorizzato "date" in appositi Data, DATETIME e/o tipi di dati TIMESTAMP e non li memorizzano come stringhe in vari formati, ad esempio 'dd/mm/yyyy'
, m/d/yyyy
, date giuliane, o in formati sporadicamente non canonici, o come un numero di secondi dall'inizio dell'epoca, questa risposta dovrebbe essere molto più lungo
Questo è il post che ho letto e utilizzato nel mio codice. – karadayi
Tu don ' t spiegare quale errore si ottiene o come questo non funziona. A meno che questa domanda non sia migliorata, verrà chiusa una domanda doppia. –
Non ottengo alcun output (nessun errore, nessun risultato) Se aggiungo la riga con 'DATE (dErstellt)> (NOW() - INTERVAL 7 DAY)' – karadayi