DOMANDA Query SQL che si blocca ad una certa condizione

Pubblicità

hddsfortuna

Utente Attivo
Messaggi
874
Reazioni
39
Punteggio
57
Salve a tutti,

ho bisogno di una query SQL che faccia ciò che dico io.

Ho a disposizione una tabella così:
Codice:
Id    Nome     Importo      Codice stato
1     Mario    100          1
2     Pino     200          0
3     Michele  100          1
4     Rosario  280          1
5     Gianni   150          0
6     Tonino   500          2
7     Franco   100          1

Ciò che voglio è selezionare le righe in ordine di id decrescente, e questo lo faccio con ORDER BY id DESC; ma mi servono solo le righe dove il codice stato è 1, e lo faccio con WHERE codice = 1, ma al primo risultato dove il codice è 2, si ferma la query e non mi mostra più niente.
In poche parole mi servono solo le righe 1, 3 e 4.

Come posso fare?


Grazie
 
SQL non è procedurale quindi la query non si ferma.
Comunque la query è:
SELECT * FROM tabella
WHERE Codice_stato = 1
ORDER BY Id DESC

NB: Non non creare i nomi delle tabelle con gli spazi (usa gli _), lettere accentate, ecc..

NB2: I nomi delle tabelle sono case sensitive

Inviato dal mio Moto G (5) Plus utilizzando Tapatalk
 
Per i nomi maiuscolo/minuscolo ho risolto mettendo tutto minuscolo, per lo spazio l'ho rimosso facendo il campo codicestato.

SQL non è procedurale quindi la query non si ferma.
Quindi non c'è un modo per interrompere il prelievo delle righe alla riga 6, in quando codicestato = 2?


Grazie
 
Per i nomi maiuscolo/minuscolo ho risolto mettendo tutto minuscolo, per lo spazio l'ho rimosso facendo il campo codicestato.


Quindi non c'è un modo per interrompere il prelievo delle righe alla riga 6, in quando codicestato = 2?


Grazie
A grandi linee, del prelievo delle righe se ne occupa l'engine SQL ed è lui che decide come effettuare la query, cioè di come fare il parsing delle tabelle.
In una query come quella sopra comunque immagino che scansioni tutte le righe della tabella.

Per approfondimenti ti conviene dare un'occhiata ai manuali di Oracle.

Inviato dal mio Moto G (5) Plus utilizzando Tapatalk
 
Attualmente sto facendo così, uso questa query:

SELECT * FROM pagamenti WHERE codice = 1 OR codice = 2 ORDER BY id ASC

E con PHP uso questo algoritmo:
PHP:
while($riga = mysql_fetch_assoc($q)) {
if($riga['codicestato'] == 2) { break; }
# e qui il resto del codice PHP
}

Ma ciò che voglio sapere è: c'è un modo per far fare il controllo a mysql? O devo farlo perforza con php?


Grazie
 
La query che hai scritto ritorna tutti i record con codicestato 1 e 2.
Tu cosa devi ottenere??

Inviato dal mio Moto G (5) Plus utilizzando Tapatalk
 
Non so quale sia il tuo scopo, ma ricorda che in un database relazionale l'ordine delle tuple non e' rilevante e, in generale, non devi farci affidamento.
Ora stai lavorando su una tabella piccola e di cui sai a priori il contenuto, ma dovresti cercare di lavorare pensando di dover estrarre (o inserire) dati da un qualcosa di cui conosci solo lo schema (o insieme di attributi) e nient'altro: potenzialmente potresti avere milioni di tuple come anche nessuna, non devi aspettarti di avere un serie di record in un certo ordine perche' non e' detto che si verifichi sempre.
 
Mi serve ottenere tutti i codicestato = 1 fino al primo codicestato = 2 escluso.


Grazie

Sinceramente non capisco il senso di questa cosa visto che, in genere i pagamenti, si filtrano per stato (o al limite si contano o sommano), anche perchè è una di quelle tabelle che si ingrossano a dismisura in poco tempo (o almeno ti auguro si riempia il più possibile :D).

Comunque, se vuoi utilizzare solamente l'sql, il modo più semplice è inserire dei timestamp e utilizzare quelli per filtrare i record che ti servono.
Tieni però presente che se il numero di record diventa consistente (anche solo 2-3000), con quel ciclo while potresti far venire un'attacco di cuore alla cpu e al browser.
 
Pubblicità
Pubblicità
Indietro
Top