E' corretto questo SELECT?

Ragazzi ho questo select:

SELECT SUM(exchange) AS tot FROM $_lines WHERE uid='$uid' AND pmt_type<>'$TRANS_ENUM_SPEND' AND date<now() AND (status='$STATUS_ENUM_ENABLE' OR (status='$STATUS_ENUM_DISABLE' AND pmt_type='$TRANS_ENUM_WITHDRAW'))

E credo che non sia corretto, ma siccome non sono un esperto di SQL mi rivolgo a voi

p.s. vi vorrei chiedere se mi potete, se volete, "tradurre"(=spiegare in parole semplici) questo select, specialmente l'ultima parte con quella doppia parentesi.

Grazie

inviato 10 anni fa
dantefoxfox
X 0 X

Perché credi che la query sia sbagliata? Ricevi degli errori? Non restituisce il risultato desiderato?

risposto 10 anni fa
Gianni Tomasicchio
X 0 X

....

p.s. vi vorrei chiedere se mi potete, se volete, "tradurre"(=spiegare in parole semplici) questo select, specialmente l'ultima parte con quella doppia parentesi.

...

SELECT SUM(exchange) AS tot

Fa la somma di tutti i valori del campo exchange.

questa somma la ricavi dall'alias (AS) tot

FROM $_lines

Selezioni la tabella su cui eseguire la query ($_lines)

WHERE uid='$uid' AND pmt_type<>'$TRANS_ENUM_SPEND' AND date<now() 
AND (status='$STATUS_ENUM_ENABLE' OR (status='$STATUS_ENUM_DISABLE' AND pmt_type='$TRANS_ENUM_WITHDRAW'))

Per questo devi avere chiare come si comportano AND-OR

http://dev.mysql.com/doc/refman/5.0/en/logical-operators.html

 valore1 valore1   AND  OR    0             0            0     0    1             0            0     1    0             1            0     1    1             1            1     1

La tua condizione sarà verificata se

uid='$uid'

AND

pmt_type<>'$TRANS_ENUM_SPEND'  ( se pmt_tipe è diverso da $TRANS_ENUM_SPEND)

AND date<now()   (se valore nel campo date e z della data odierna)

Fino a qui nulla di complicato penso...

Tutta quest'ulitma condizione

AND (status='$STATUS_ENUM_ENABLE' OR

(status='$STATUS_ENUM_DISABLE' AND pmt_type='$TRANS_ENUM_WITHDRAW'))

sarà verificata se (sostituisco le parole con i numeri)

AND (1 OR (1 AND 1))   ===> verificata AND (1 OR (1 AND 0))   ===> veriicata AND (1 OR (0 AND 1))   ===> verificata AND (0 OR (0 AND 0))   ===> NON verificata

Ossia, quest'ultimo pezzo sarà sempre verificato, tranne nel caso nessuna delle condizioni dentro di esso sia vera...

Spero di essere riuscito a spiergartelo un po' e soprattutto di non aver sbagliato la spiegazione  ;)...

ciao

Lore

risposto 10 anni fa
Lore
Lore
1
modificato 10 anni fa
X 0 X
Perché credi che la query sia sbagliata? Ricevi degli errori? Non restituisce il risultato desiderato?

Non conosco per bene la sintassi sql, quindi quando ho visto le doppie parentesi, non sapevo più cosa pensare, anche perchè era la prima volta che le vedevo, e quindi...non sapendo dove sbattere la testa mi sono rivolto a voi.

Il script che ho, se si verificano qualche errore non restituisce niente, e quindi ero in dubbio.

Ho ancora dei dubbi su questo:

date<now()

date so che è un campo della tabella, ma sto now() non c'è nella tabella, come lo devo considerare?

Grazie Lore per l'esauriente spiegazione, grazie ;)

risposto 10 anni fa
dantefoxfox
X 0 X

now() è una funzione di MySQL che restituisce la data e l'orario corrente. Esempio:

mysql> SELECT NOW();
+---------------------+
| NOW()               |
+---------------------+
| 2006-03-05 15:18:43 |
+---------------------+

 :bye:

risposto 10 anni fa
Gianni Tomasicchio
X 0 X

now() è una funzione di MySQL che restituisce la data e l'orario corrente. Esempio:

mysql> SELECT NOW();
+---------------------+
| NOW()               |
+---------------------+
| 2006-03-05 15:18:43 |
+---------------------+

 :bye:

Ma va bene per indicare il giorno corrente? Oppure bisogna inserire qualcosa di più?

risposto 10 anni fa
dantefoxfox
X 0 X

[polemica]

Ma fare qualche prova per conto proprio è così pericoloso?!?  >:D

[/polemica]

Sinceramente non ho capito cosa mi hai chiesto  ???  ma mi sembra evidente dall'esempio che ti ho riportato che si tratta di una funzione che corisponde a chiedere a MySQL "che giorno è oggi? che ore sono?"

 :bye:

risposto 10 anni fa
Gianni Tomasicchio
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda