Ordinare query per campo elaborato

Pubblicità

hddsfortuna

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

quello che mi serve è trovare una clausola ORDER BY di SQL giusta per quello che mi serve.

Ho una tabella del genere:
  • Nome squadra
  • Punti
  • Vinte
  • Pareggiate
  • Perse
  • Gol fatti
  • Gol subiti


Ora mi serve estrarre i dati dal db in ordine di differenza reti, campo che non esiste, ma è elaborabile da gol fatti - gol subiti.


Come faccio?



Grazie
 
Salve a tutti,

quello che mi serve è trovare una clausola ORDER BY di SQL giusta per quello che mi serve.

Ho una tabella del genere:
  • Nome squadra
  • Punti
  • Vinte
  • Pareggiate
  • Perse
  • Gol fatti
  • Gol subiti


Ora mi serve estrarre i dati dal db in ordine di differenza reti, campo che non esiste, ma è elaborabile da gol fatti - gol subiti.


Come faccio?



Grazie

select nome squadra etc etc, sum(golfatti - gol subiti) as differenza where etc etc order by differenza;

dovrebbe essere cosi
 
Ho provato, e però se la differenza è negativa mi escono numeri astronomici in diff_reti.


Come mai?

Grazie


allora dipende da cosa stai facendo.
se il tuo applicativo ha + squadre e devi fare questo calcolo per singola squadra devi fare:
select golfatti - golsubiti as diff from tabella where squadra = squadra1
 
allora dipende da cosa stai facendo.
se il tuo applicativo ha + squadre e devi fare questo calcolo per singola squadra devi fare:
select golfatti - golsubiti as diff from tabella where squadra = squadra1
Per ogni squadra, se gol fatti > gol subiti nessun problema, mi dice il numero corretto in diff_reti.

Se invece gol fatti < gol subiti, in diff_reti mi dà un numero grosso, tipo un intero a 8 byte.

Può essere perché i campi golfatti e golsubiti sono unsigned?



Grazie
 
Per ogni squadra, se gol fatti > gol subiti nessun problema, mi dice il numero corretto in diff_reti.

Se invece gol fatti < gol subiti, in diff_reti mi dà un numero grosso, tipo un intero a 8 byte.

Può essere perché i campi golfatti e golsubiti sono unsigned?



Grazie


posso capire come hai dichiarato i campi in sql e dove fai gli inserimenti?
 
posso capire come hai dichiarato i campi in sql e dove fai gli inserimenti?
Questa è la query per creare la tabella:
Codice:
CREATE TABLE `squadre` (
`sid` tinyint unsigned NOT NULL AUTO_INCREMENT PRIMARY KEY,
`nome` varchar(10) NOT NULL,
`punti` tinyint unsigned NOT NULL,
`vinte` tinyint unsigned NOT NULL,
`pari` tinyint unsigned NOT NULL,
`perse` tinyint unsigned NOT NULL,
`golfatti` tinyint unsigned NOT NULL,
`golsubiti` tinyint unsigned NOT NULL
) ENGINE=MyISAM;

Ciao
 
Questa è la query per creare la tabella:
Codice:
CREATE TABLE `squadre` (
`sid` tinyint unsigned NOT NULL AUTO_INCREMENT PRIMARY KEY,
`nome` varchar(10) NOT NULL,
`punti` tinyint unsigned NOT NULL,
`vinte` tinyint unsigned NOT NULL,
`pari` tinyint unsigned NOT NULL,
`perse` tinyint unsigned NOT NULL,
`golfatti` tinyint unsigned NOT NULL,
`golsubiti` tinyint unsigned NOT NULL
) ENGINE=MyISAM;

Ciao



scusa perche tinyint e non integer??
che sql stai usando? sql server? mysql? postgres?
 
ma come fai a far arrivare i dati al db
??

posta del codice
Attualmente non ho creato nessun file php, ho semplicemente eseguito sul db la seguente query:
Codice:
SELECT nome, punti, golfatti-golsubiti as diff_reti FROM squadre ORDER BY punti DESC, diff_reti DESC
Il fatto è che nella colonna diff_reti mi dà il valore normale se golfatti > golsubiti, ma invece mi scrive un numero da quasi 20 cifre se golfatti < golsubiti.

Questo lo fa se i due campi sono tinyint o int, come suggerito da te.



Ciao
 
Attualmente non ho creato nessun file php, ho semplicemente eseguito sul db la seguente query:
Codice:
SELECT nome, punti, golfatti-golsubiti as diff_reti FROM squadre ORDER BY punti DESC, diff_reti DESC
Il fatto è che nella colonna diff_reti mi dà il valore normale se golfatti > golsubiti, ma invece mi scrive un numero da quasi 20 cifre se golfatti < golsubiti.

Questo lo fa se i due campi sono tinyint o int, come suggerito da te.



Ciao

ma in teoria dovresti devi fare il campo meno o + non maggiore e minore...
proverò a fare una prova db con mysql e vedrò se a me fa lo stesso scherzo

- - - Updated - - -

io ho provato facendo due esempi e funziona correttamente
 
Pubblicità
Pubblicità
Indietro
Top