Visualizzazione dei risultati da 1 a 9 su 9

Discussione: Mysql: Ordine Select

  1. #1

    Mysql: Ordine Select

    Buongiorno,
    ho i seguenti record:

    Nome: Luca
    Idcat1: 1
    Idcat2: 3
    Idcat3: vuoto
    Posizione: 1

    Nome: Nicola
    Idcat1: 2
    Idcat2: 1
    Idcat3: 5
    Posizione: 2

    Nome: Paolo
    Idcat1: 2
    Idcat2: 3
    Idcat3: 5
    Posizione: 4

    Nome: Simone
    Idcat1: 1
    Idcat2: vuoto
    Idcat3: vuoto
    Posizione: 3

    La ricerca è: 1
    Vorrei avere in ordine prima i campi che hanno 1 in Idcat1, poi quelli che hanno 1 in Idcat2 e così via (escludendo quelli che non hanno in nessun idcat il valore cercato) ordinati inoltre per Posizione

    select in ordine dell'esempio sopra:
    Luca, Simone, Nicola

    Come posso fare?
    Posso fare tutto in un unica select?

    Fatemi sapere.

    Grazie mille.

  2. #2
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,372
    Prova cosi

    codice HTML:
    SELECT `Nome`,`idcat1`,`idcat2`,`idcat3`,`posizione`,
    case when idcat1 = 1 then 1 else (case when idcat2 = 1 then 2 else (case when idcat3 = 1 then 3 else 100 end) end) end as prio
    FROM `tabella`
    where idcat1 = 1 or idcat2 = 1 or idcat3 = 1
    order by prio, posizione
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  3. #3
    Forse sto sbagliando qualcosa:
    codice:
    SELECT Nome,idcategoria1,idcategoria2,idcategoria3,posizione case when idcategoria1 =6 then 1 else (case when idcategoria2 =6 then 2 else (case when idcategoria3 =6 then 3)) as prio FROM prodotti where idcategoria1 = 1 or idcategoria2 = 1 or idcategoria3 = 1 order by prio, posizione
    Ho cambiato idcat1,2,3 con idcategoria1,2,3 che son quelli corretti.
    Potresti verificare?

  4. #4
    Così non mi da errore però non mi trova record.
    Posto la query restituita a video:

    SELECT *, case when idcategoria1 = 6 then 1 else (case when idcategoria2 = 6 then 2 else (case when idcategoria3 = 6 then 3 else 100 end) end) end as prio FROM prodotti where idcategoria1 = 1 or idcategoria2 = 1 or idcategoria3 = 1 order by prio, posizione LIMIT 0, 12
    Ultima modifica di pegaso22; 27-12-2016 a 17:20

  5. #5
    RISOLTO, C'ERA UN ERRORE:

    SELECT *, case when idcategoria1 = 6 then 1 else (case when idcategoria2 = 6 then 2 else (case when idcategoria3 = 6 then 3 else 100 end) end) end as prio FROM prodotti where idcategoria1 = 1 or idcategoria2 = 1 or idcategoria3 = 1 order by prio, posizione LIMIT 0, 12

    Mi pare tutto perfetto, grazie mille!!

  6. #6
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,372
    Come hai fatto non puo' funzionare. Nella clausola where metti idcategoria1 = 1 or etc.. Mentre nella case della select metti idcategoria1 = 6 ... etc.
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  7. #7
    Si si, scusa.
    L'ultimo codice ha quella variazione che hai indicato

  8. #8
    Ciao, mi servirebbe un altro aiuto per una nuova query che non so se sia possibile fare.
    Praticamente dovrei selezionare i successivi 4 record a partire da un determinato id.
    Se però l'id si trova per esempio in penultima posizione deve prendere l'ultimo e i primi 3 record della tabella.

    Fa a farlo in un unica query?
    Come?

  9. #9
    altra richiesta altro post :-)

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.