Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1
    Utente di HTML.it L'avatar di gasmor
    Registrato dal
    Apr 2004
    Messaggi
    1,768

    Select ordinata per data e per id

    ciao a tutti,

    ho un bel problema con una query select.
    Devo selezionare tutte le righe:

    che abbiano `user_data`=1
    ordinarle in base a user_regdate decrescente
    e limitare la ricerca a step di 5

    e fino a qui tramite questa query sono ok:

    $start = 0;
    $step = 5;

    SELECT * FROM `tabella` WHERE `user_data`=1 ORDER BY user_regdate DESC LIMIT $start, $step

    il problema è che devo mettere per primi i risultati che abbiano un certo valore per il campo `user_id`

    Ad esempio partendo da questa tabella:

    user_id - user_regdate - name

    1 - 1000 - fabio
    2 - 1300 - andrea
    3 - 500 - alessandro
    4 - 300 - pippo
    5 - 900 -chiara

    voglio che siano primi i campi che abbiano `user_id` IN (3,4,5) e che siano ordinati per user_regdate decrescente.

    quindi:

    5 - 900 -chiara
    3 - 500 - alessandro
    4 - 300 - pippo

    2 - 1300 - andrea
    1 - 1000 - fabio

    Sono stato chiaro?
    :master:
    Hai provato a creare un sito con Jaaxo Cms PHP5? new!

  2. #2
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,923
    codice:
    (select * from tabella where user_id in(3,4,5) order by user_regdate desc limit 3)
    union 
    (select * from tabella order by user_regdate desc limit 0,1000)

  3. #3
    Utente di HTML.it L'avatar di gasmor
    Registrato dal
    Apr 2004
    Messaggi
    1,768
    grazie, mi spieghi cosa fa?
    Hai provato a creare un sito con Jaaxo Cms PHP5? new!

  4. #4
    Utente di HTML.it L'avatar di gasmor
    Registrato dal
    Apr 2004
    Messaggi
    1,768
    la tua query funziona solo nel primo step.

    ad esempio se faccio limit 0,10 nella seconda query vedo questo

    - per primi i risultati della prima query
    - poi i 10 risultati della seconda query
    (invece dovrei visualizzare in tutto solo 10 elementi)

    se faccio limit 10,20 nella seconda query vedo questo

    - per primi i risultati della prima query (che vedevo già nella pagina precedente)
    - poi i successivi 10 risultati della seconda query

    :master:
    Hai provato a creare un sito con Jaaxo Cms PHP5? new!

  5. #5
    Utente di HTML.it L'avatar di gasmor
    Registrato dal
    Apr 2004
    Messaggi
    1,768
    up
    Hai provato a creare un sito con Jaaxo Cms PHP5? new!

  6. #6
    Utente di HTML.it L'avatar di gasmor
    Registrato dal
    Apr 2004
    Messaggi
    1,768
    ho provato con questa query:

    $query_singles_on = "(SELECT user_id , username, user_regdate FROM `phpbb_users` WHERE `user_id` IN(3,4,5) ORDER BY user_regdate DESC)
    union
    (SELECT user_id , username, user_regdate FROM `phpbb_users` ORDER BY user_regdate DESC) LIMIT $start,$step";


    che mi funziona bene in locale con la versione 4.0.15 di MySql
    ma non online che ho la verisone 4.1.11a-4sarge7 di MySql.

    in pratica, online, mi mette si prima le righe la cui user_id in(3,4,5) ma mi ignora l'order by.
    Ho provato, anche, a mettere l'ORDER BY furoi dalle parentesi

    $query_singles_on = "(SELECT user_id , username, user_regdate as time FROM `phpbb_users` WHERE `user_id` IN(3,4,5))
    union
    (SELECT user_id , username, user_regdate FROM `phpbb_users`) ORDER BY time DESC LIMIT $start,$step";

    ma, in questo modo, i risultati sono ordinati per time e quindi non mi mette più per prime le riche che hanno `user_id` IN(3,4,5)

    Hai provato a creare un sito con Jaaxo Cms PHP5? new!

  7. #7
    prova usando una if....

    codice:
    select *,
    if(id in (3,4,5), 2, 1) as ord
    FROM tabella
    order by user_regdate desc, ord
    limit .....

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

  8. #8
    Utente di HTML.it L'avatar di gasmor
    Registrato dal
    Apr 2004
    Messaggi
    1,768
    non capisco una cosa:

    select *,
    if(id in (3,4,5), 2, 1) as ord
    FROM tabella
    order by user_regdate desc, ord
    limit .....

    è obbligatorio metterlo? perchè io solo quali sono gli ide che devono stare prima, gli altri non li conosco
    Hai provato a creare un sito con Jaaxo Cms PHP5? new!

  9. #9
    Utente di HTML.it L'avatar di gasmor
    Registrato dal
    Apr 2004
    Messaggi
    1,768
    Originariamente inviato da gasmor
    non capisco una cosa:

    select *,
    if(id in (3,4,5), 2, 1) as ord
    FROM tabella
    order by user_regdate desc, ord
    limit .....

    è obbligatorio metterlo? perchè io conosco solo quali sono gli id che devono stare prima, gli altri non li conosco
    Hai provato a creare un sito con Jaaxo Cms PHP5? new!

  10. #10
    Originariamente inviato da gasmor
    non capisco una cosa:

    select *,
    if(id in (3,4,5), 2, 1) as ord
    FROM tabella
    order by user_regdate desc, ord
    limit .....

    è obbligatorio metterlo? perchè io solo quali sono gli ide che devono stare prima, gli altri non li conosco
    non ho letto a fondo tutto il thread.... considero che:

    1) definisci tre id da estrarre.
    2) questi id tu li vuoi in ordine DESC di un certo valore.
    3) a seguire gli altri
    4) con paginazione.

    la if identifica i tre record che quindi non hanno piu' necessita' di essere dichiarati nel where. Ai tre id identificati si assegna il valore ord = 2 a tutti gli altri ord = 1

    dovresti invertire l'order by perche' l'ho buttato li pensando che quello che serviva era la if.
    Quindi valutando le cose come descritte nei punti 1,2,3 l'order by dovrebbe essere:

    order by ord DESC, user_regdate DESC


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

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 © 2025 vBulletin Solutions, Inc. All rights reserved.