Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2001
    residenza
    Napoli, Italia
    Messaggi
    1,074

    [MySql] Query ordinata in modo non progressivo

    É possibile - e nel caso, come - fare una query che mi restituisca i risultati secondo un ordine stabilito da una lista di valori?
    Mi spiego meglio...
    Poniamo che io abbia una variabile del tipo:
    codice HTML:
    $mialista = "5,9,12,16,2,36, ...";
    e voglia fare una query che mi restituisca i dati ordinati secondo il criterio:
    'id' = 5
    'id' = 9
    'id' = 12
    'id' = 16
    'id' = 2
    'id' = 36
    'id' = ...
    e quindi non secondo un ordine progressivo del campo preso a criterio.
    Si può fare?
    metatad
    graphic & web design

  2. #2
    Utente di HTML.it
    Registrato dal
    Dec 2002
    Messaggi
    1,326
    penso che si possa fare...

    $mialista = "5,9,12,16,2,36, ...";

    codice:
    select
    position(','||tabella.id||',',',25,9,12,16,2,36,') posizione,
    tabella.id,
    tabella.item
    FROM tabella
    order by
    position(','||tabella.id||',',',5,9,12,16,2,36,')

    ciao
    Ultima modifica di 123delphi321; 03-06-2014 a 19:40

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2001
    residenza
    Napoli, Italia
    Messaggi
    1,074
    no, viene ricavata da altre query...
    metatad
    graphic & web design

  4. #4
    Utente di HTML.it
    Registrato dal
    Dec 2002
    Messaggi
    1,326
    penso che si possa fare...

    $mialista = "5,9,12,16,2,36, ...";

    codice:
    select
    position(','||tabella.id||',',',5,9,12,16,2,36,') posizione,
    tabella.id,
    tabella.item
    FROM tabella
    order by
    position(','||tabella.id||',',',5,9,12,16,2,36,')

    ciao
    Ultima modifica di 123delphi321; 03-06-2014 a 20:20

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2001
    residenza
    Napoli, Italia
    Messaggi
    1,074
    Quindi una cosa del genere, se capisco bene:
    codice HTML:
    SELECT POSITION (','||miatabella||',',',5,7,3,2,') POSIZIONE, miatabella, * FROM miatabella ORDER BY POSITION (','||miatabella||',',',5,7,3,2,')
    Ho messo * al posto di tabella.item perchè mi servono i record di più campi.
    Però c'è una cosa che ancora non capisco. In
    (','||miatabella||',',',5,7,3,2,')
    la prima virgola indica il separatore, ma le altre dopo || cosa stanno a rappresentare? E quante devono essere, conseguentemente??
    metatad
    graphic & web design

  6. #6
    Utente di HTML.it
    Registrato dal
    Dec 2002
    Messaggi
    1,326
    Quote Originariamente inviata da metatad Visualizza il messaggio
    Quindi una cosa del genere, se capisco bene:
    codice HTML:
    SELECT POSITION (','||miatabella||',',',5,7,3,2,') POSIZIONE, miatabella, * FROM miatabella ORDER BY POSITION (','||miatabella||',',',5,7,3,2,')
    Ho messo * al posto di tabella.item perchè mi servono i record di più campi.
    Però c'è una cosa che ancora non capisco. In
    (','||miatabella||',',',5,7,3,2,')
    la prima virgola indica il separatore, ma le altre dopo || cosa stanno a rappresentare? E quante devono essere, conseguentemente??
    conosci la funzione position?

    http://www.w3resource.com/mysql/stri...n-function.php

    POSITION (','||miatabella||',',',5,7,3,2,')
    dove hai scritto miatabella deve andare una stringa da ricercare all'interno di un'altra stringa.

    adesso: io pensavo che tu volessi cercare l'id della tua tabella all'interno della stringa $mialista = "5,9,12,16,2,36, ...";, e a secondo della sua posizione decidere l'ordine di output.

    la virgola che mettevo prima e dopo dell tuo id, fanno in modo da cercare questa stringa: ',2,' all'interno di mialista, ho inserito la virgola prima e dopo al fine di non ottenere una posizione errata. spiego meglio

    se tu cerchi il valore 2 dentro "5,9,12,16,2,36, ..."
    otterrai come risultato 5 perche il primo 2 è quello del valo 12

    se, invece, tu cerchi il valore ,2, dentro "5,9,12,16,2,36, ..."
    otterrai come risultato 10 che è il punto esatto che cerchi.

  7. #7
    Utente di HTML.it
    Registrato dal
    Sep 2001
    residenza
    Napoli, Italia
    Messaggi
    1,074
    Si, temo di non essere stato del tutto chiaro... Dunque, ciò che mi serve è:
    1) creo una variabile, al cui interno sono elencati una serie di valori numerici, separati da una virgola
    2) faccio una query, che mi restituisce una serie di record, da vari campi, e l'ordine con cui vengono restituiti i dati deve essere quello della variabile precedente; ovvero, se questa è: "5,9,2,14...", la query deve restituirmi prima i record con id = 5, poi quelli con id = 9, quindi con id = 2, e così via...
    Non mi interessa la posizione dei vari valori all'interno della variabile, ma che la query li utilizzi in successione per determinare l'ordine con cui restituisce i record.
    Spero di essere stato più chiaro...
    metatad
    graphic & web design

  8. #8
    Utente di HTML.it
    Registrato dal
    Dec 2002
    Messaggi
    1,326
    Quote Originariamente inviata da metatad Visualizza il messaggio
    Si, temo di non essere stato del tutto chiaro... Dunque, ciò che mi serve è:
    1) creo una variabile, al cui interno sono elencati una serie di valori numerici, separati da una virgola
    2) faccio una query, che mi restituisce una serie di record, da vari campi, e l'ordine con cui vengono restituiti i dati deve essere quello della variabile precedente; ovvero, se questa è: "5,9,2,14...", la query deve restituirmi prima i record con id = 5, poi quelli con id = 9, quindi con id = 2, e così via...
    Non mi interessa la posizione dei vari valori all'interno della variabile, ma che la query li utilizzi in successione per determinare l'ordine con cui restituisce i record.
    Spero di essere stato più chiaro...
    sei stato molto chiaro sia nel primo post che adesso!

    ma tu hai provato la query che io ti ho postato???????

    codice:
    codice:
         select
    position(','||tabella.id||',',',5,9,12,16,2,36,') posizione,
    tabella.id,
    tabella.item
    FROM tabella
    order by
    position(','||tabella.id||',',',5,9,12,16,2,36,')
    dimmi, cosa restituisce??? non restituisce cio che vuoi?

    nel caso prova a postare uno script di popolamento tabella

    ciao,...e fammi sapere!

  9. #9
    Utente di HTML.it
    Registrato dal
    Sep 2001
    residenza
    Napoli, Italia
    Messaggi
    1,074
    No, scusa, non ho provato, perchè non ho ancora capito due cose:
    1) dove tu scrivi ||tabella.id|| io dovrei scrivere, ad es., ||docenti.id|| dove 'docenti' sarebbe il nome della tabella?
    2) dopo ||tabella.id|| tu scrivi: ',',', e poi a seguire i valori della variabile; quelle due virgole, racchiuse tra apici, devono essere due, e rappresentano i 'limiti' dei valori?
    metatad
    graphic & web design

  10. #10
    Utente di HTML.it
    Registrato dal
    Dec 2002
    Messaggi
    1,326
    1) dove tu scrivi ||tabella.id|| io dovrei scrivere, ad es., ||docenti.id|| dove 'docenti' sarebbe il nome della tabella?

    si

    2) dopo ||tabella.id|| tu scrivi: ',',', e poi a seguire i valori della variabile; quelle due virgole, racchiuse tra apici, devono essere
    due, e rappresentano i 'limiti' dei valori?

    scrivo la ',' sia prima che dopo.... ( ','||tabella.id||',' ) , dobbiamo cercare una stringa simile a questa: ',2,' per essere sicuri della posizione. se vedi nel post precedente ti ho fatto un esempio.

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.