|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Apr 2006
Città: Pordenone
Messaggi: 455
|
[MySQL/PHP] SELECT di tutti i result tranne primo e ultimo
Salve,
sapete dirmi per caso come si faccia a fare una query che prenda tutti i risultati tranne il primo e l'ultimo? Va bene sia una query mysql che un workaround in PHP. Grazie, Flavio |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Feb 2010
Messaggi: 466
|
prova cosi:
Codice PHP:
__________________
I robot hanno scintillanti fondoschiena metallici che non dovrebbero essere baciati. |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Jul 2007
Messaggi: 1092
|
Codice:
select * from tabella where id not in (select min(id) from tabella union select max(id) from tabella) order by id |
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Nov 2001
Città: Boscoreale (NA)
Messaggi: 421
|
non facevi prima a prendere tutti i valori dalla query e poi con il php escludevi a video il primo e l'ultimo?
|
|
|
|
|
|
#6 | |
|
Member
Iscritto dal: Apr 2010
Messaggi: 163
|
Quote:
Ciao!
__________________
MSI B550-A PRO|Ryzen™ 5 3600|Freezer 13 PRO|RX 6600|CORSAIR CX600|Crucial P3 Plus 1TB|BL2K8G32C16U4B 3200 MHz|Q27G2G4
|
|
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Nov 2001
Città: Boscoreale (NA)
Messaggi: 421
|
sicuro che è meglio in termini di prestazioni?
questo è un argomento che mi ha sempre interessato. Non è meglio chiamare meno volte possibile o chiamare una volta sola il database per interrogare una tabella anzichè farlo più volte in una stessa pagina? |
|
|
|
|
|
#8 |
|
Member
Iscritto dal: Apr 2010
Messaggi: 163
|
Certamente!. Infatti questo:
Codice:
select * from tabella where id not in (select min(id) from tabella union select max(id) from tabella) order by id Ciao!
__________________
MSI B550-A PRO|Ryzen™ 5 3600|Freezer 13 PRO|RX 6600|CORSAIR CX600|Crucial P3 Plus 1TB|BL2K8G32C16U4B 3200 MHz|Q27G2G4
|
|
|
|
|
|
#9 |
|
Senior Member
Iscritto dal: Nov 2001
Città: Boscoreale (NA)
Messaggi: 421
|
la query è unica ma in realtà è come se facesse 2 chiamate al database essendoci 2 select.
cmq io parlavo in termini generali nella domanda di prima. Forse è meglio che ti faccio un esempio... per esempio abbiamo 100 o 1000 news id_news(tipo int), titolo_news(varchar), categoria_news(tipo int) e poi una tabella con le categorie id_categoria(tipo int), titolo_categoria(varchar) ora io di solito faccio una sola query per le categorie e mi salvo i valori in un array in php e poi una query per le news e confronto i 2 id con array_keys_exists per ottenere il nome della categoria. Però c'è sempre il metodo che tu hai citato sopra...quello di usare un'unica query per fare entrambe le cose. Quale è quello più produttivo? Ultima modifica di black_wizard : 19-02-2011 alle 21:21. |
|
|
|
|
|
#10 |
|
Senior Member
Iscritto dal: Mar 2005
Città: Morimondo city
Messaggi: 5491
|
che si una unica query non vuol dire niente, in qui il db deve ordinare per trovare il min, poi per trovare il max e in più fare una union e poi deve fare i confronti per risolvere il not in, su tanti dati è potenzialmente devastante
__________________
Khelidan Ultima modifica di khelidan1980 : 19-02-2011 alle 22:12. |
|
|
|
|
|
#11 |
|
Member
Iscritto dal: Mar 2008
Messaggi: 267
|
Però c'è anche da dire che la colonna "id" è molto probabilmente (anzi, sicuramente) definita come indice e chiave primaria, quindi la ricerca all'interno di quella colonna è velocissima dato che i dati sono in cache.
Inoltre quando si esegue una query, essa viene automaticamente ottimizzata dall'ottimizzatore interno, cosa che ovviamente non succede nel caso di query multiple. Ultima modifica di Supdario : 19-02-2011 alle 22:30. |
|
|
|
|
|
#12 |
|
Member
Iscritto dal: Apr 2010
Messaggi: 163
|
Non ho resistito
Sorgente di prova: Codice PHP:
0.00034189224243164 0.00032901763916016 0.00031590461730957 --- 0.00038290023803711 0.00032997131347656 0.00031614303588867 --- 0.0003509521484375 0.00037193298339844 0.00036811828613281 --- 0.00034999847412109 0.00037002563476562 0.00031590461730957 --- 0.00052499771118164 0.00056695938110352 0.00053501129150391 --- 0.00034999847412109 0.00037503242492676 0.00032591819763184 --- 0.00052213668823242 0.00056099891662598 0.00049090385437012 Eseguito su altervista; quindi il carico dei server varia secondo degli utenti presenti sui siti del server. Quando avrò tempo, proverò in locale, per avere test un po più veritiero p.s: i record della tabella sono 118 (116 eliminanto la prima e l'ultima). Conclusioni: A parte il modo con shift + pop, più o meno ci impiegano lo stesso tempo. A volte è più rapido utilizzare mysql; a volte PHP. Da notare, però, che il modo con unset() restituisce un array che inizia dalla posizione [1].. quindi bisognerebbe rimapparlo, impiegando più tempo Ciao!
__________________
MSI B550-A PRO|Ryzen™ 5 3600|Freezer 13 PRO|RX 6600|CORSAIR CX600|Crucial P3 Plus 1TB|BL2K8G32C16U4B 3200 MHz|Q27G2G4
Ultima modifica di alemoppo : 20-02-2011 alle 00:48. |
|
|
|
|
|
#13 | |
|
Senior Member
Iscritto dal: Nov 2001
Città: Boscoreale (NA)
Messaggi: 421
|
c'è anche il metodo
Quote:
Non avevo mai pensato di eseguire questi test per risolvere i miei dubbi. Cmq ovviamente l'ho fatto eseguire un paio di volte...su una tabella con 303 record in locale e su un hosting aruba da 496 record. Ho notato per lo più che la 3° funzione fatta interamente con una sola query..la sua velocità varia mentre la prima è quella peggiore di tutte. Cmq bene o male si può affermare che per cose tipo queste del soggetto del thread..usare una sola query o il 2° metodo o il 4° porta allo stesso risultato. Bisogna veder su record un pò più grandicelli..o più tabelle messe in relazione. Ultima modifica di black_wizard : 20-02-2011 alle 02:56. |
|
|
|
|
|
|
#14 |
|
Senior Member
Iscritto dal: Feb 2010
Messaggi: 466
|
Con i test del post precedente vince quello che esegue un unica query
50.000 elementi e test ripetuti 10 volte test_1 : Media : 3.6415376186371 test_2 : Media : 3.7319422721863 test_3 : Media : 3.5299593448639 Codice PHP:
__________________
I robot hanno scintillanti fondoschiena metallici che non dovrebbero essere baciati. Ultima modifica di bobbytre : 20-02-2011 alle 03:12. |
|
|
|
|
|
#15 | |
|
Member
Iscritto dal: Apr 2010
Messaggi: 163
|
Vero!. Non mi era nemmeno venuto in mente. Quel metodo pensandoci, dovrebbe essere velocissimo!...
Quote:
--- Comunque, l'avevo detto che era più veloce utilizzare mysql!. Più si fanno procedimenti in mysql, meglio è!... Il (mio) problema, però, è che non lo conosco bene.. e di norma eseguo le varie cose tramite PHP, anche se andrebbero effettuate con mysql Ciao!
__________________
MSI B550-A PRO|Ryzen™ 5 3600|Freezer 13 PRO|RX 6600|CORSAIR CX600|Crucial P3 Plus 1TB|BL2K8G32C16U4B 3200 MHz|Q27G2G4
|
|
|
|
|
|
|
#16 |
|
Senior Member
Iscritto dal: Nov 2001
Città: Boscoreale (NA)
Messaggi: 421
|
nei prox giorni proverò con più tabelle messe in relazione per capire quale metodo è il migliore.
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 15:34.




















