Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1

    [mysql] query con ASC e DESC insieme, si può?

    ciao,

    mi servirebbe una query di SELECT in cui i primi 3 prodotti inseriti, siano sempre stampati all'inizio della pagina ORDER BY pd_id ASC, mentre tutti gli altri prodotti devono essere accodati ai primi 3 ORDER BY pd_id DESC.

    per ora ho la query così:

    $query = "SELECT * FROM tbl_product WHERE cat_id = {$_GET['c']} ORDER BY pd_id ASC";

    come si fa?


  2. #2

    Re: [mysql] query con ASC e DESC insieme, si può?

    Originariamente inviato da blur
    ciao,

    mi servirebbe una query di SELECT in cui i primi 3 prodotti inseriti, siano sempre stampati all'inizio della pagina ORDER BY pd_id ASC, mentre tutti gli altri prodotti devono essere accodati ai primi 3 ORDER BY pd_id DESC.

    per ora ho la query così:

    $query = "SELECT * FROM tbl_product WHERE cat_id = {$_GET['c']} ORDER BY pd_id ASC";

    come si fa?

    Utilizza UNION....
    codice:
    $query = "(SELECT * FROM tbl_product 
             ORDER BY pd_id ASC
             LIMIT 0, 3)
             UNION
             (SELECT * FROM tbl_product 
             ORDER BY pd_id DESC)
             ";

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  3. #3
    Utente di HTML.it L'avatar di luca200
    Registrato dal
    Apr 2002
    Messaggi
    4,120

    Re: Re: [mysql] query con ASC e DESC insieme, si può?

    Originariamente inviato da piero.mac
    Utilizza UNION....
    codice:
    $query = "(SELECT * FROM tbl_product 
             ORDER BY pd_id ASC
             LIMIT 0, 3)
             UNION
             (SELECT * FROM tbl_product 
             ORDER BY pd_id DESC)
             ";
    Non funziona.
    La UNION si mangia gli ordinamenti se non le si dà una ORDER BY globale che però si ritroverebbe con lo stesso problema iniziale.
    Bisogna inventare qualcos'altro :master:

  4. #4
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,923
    Incuriosito ho fatto una prova.

    Aggiungendo alla seconda query limit 0,x

    con x sufficientemente grande da considerare tutti i record vengono restituiti nell'ordine giusti.

  5. #5
    boh! ho provato e funziona anche senza il limit o order by generale .... ho aggiunto solo un where per ridurre il numero delle righe della query in UNION.

    phpmyadmin aggiunge di suo il LIMIT, ma ho provato da shell cosi' come la si vede e va bene. Bisogna solo mettere le parentesi alle due queries.... l'unico problema che riscontro e' che appende anche le prime tre righe al fondo del result set dell'UNION



    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  6. #6
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,923
    Originariamente inviato da piero.mac
    boh! ho provato e funziona anche senza il limit o order by generale .... ho aggiunto solo un where per ridurre il numero delle righe della query in UNION.

    phpmyadmin aggiunge di suo il LIMIT, ma ho provato da shell cosi' come la si vede e va bene. Bisogna solo mettere le parentesi alle due queries.... l'unico problema che riscontro e' che appende anche le prime tre righe al fondo del result set dell'UNION


    Io l'ho provata su mysql 5.0.18 con sqlYog.

    Senza il limit mi vengono restituiti tutti i record in ordine crescente di id.

    Aggiungendo il limit invece mi da i primi 3 in ordine crescente e tutti gli altri in ordine decrescente.

  7. #7
    Originariamente inviato da nicola75ss
    Io l'ho provata su mysql 5.0.18 con sqlYog.

    Senza il limit mi vengono restituiti tutti i record in ordine crescente di id.

    Aggiungendo il limit invece mi da i primi 3 in ordine crescente e tutti gli altri in ordine decrescente.
    Ho fatto il contrario provando ... prima desc e poi asc.... vero.

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  8. #8
    azz! mi sono accorto adesso che discussione è andata avanti...ma le email di notifica oggi non funziano?

    cmq la query l'ho fatta come dice piero e funziona:

    $query = "(SELECT * FROM tbl_product WHERE cat_id = {$_GET['c']} ORDER BY pd_id ASC LIMIT 0, 3) UNION (SELECT * FROM tbl_product WHERE cat_id = {$_GET['c']} ORDER BY pd_id DESC) ";

    c'è qualcos'altro che dovrei sapere per caso? non è che dopo un certo numero di prodotti inizia qualche anomalia vero? ( beh, i prodotti non dovrebbero superare il centinaio.. )

  9. #9
    Utente di HTML.it L'avatar di luca200
    Registrato dal
    Apr 2002
    Messaggi
    4,120
    Ragazzi io in greco non so dirlo.

    La UNION si mangia gli ordinamenti
    Ergo: quando funziona è un caso

    Originariamente inviato da nicola75ss
    Senza il limit mi vengono restituiti tutti i record in ordine crescente di id.
    Aggiungendo il limit invece mi da i primi 3 in ordine crescente e tutti gli altri in ordine decrescente.
    Mi pare che questo lo dimostri. O no??


    Use of ORDER BY for individual SELECT statements implies nothing about the order in which the rows appear in the final result because UNION by default produces an unordered set of rows. If ORDER BY appears with LIMIT, it is used to determine the subset of the selected rows to retrieve for the SELECT, but does not necessarily affect the order of those rows in the final UNION result. If ORDER BY appears without LIMIT in a SELECT, it is optimized away because it will have no effect anyway.
    http://dev.mysql.com/doc/refman/5.0/en/union.html

  10. #10
    ok! non ti arrabbiare!

    esiste quindi un alternativa che funzioni bene?

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.