Visualizzazione dei risultati da 1 a 7 su 7

Discussione: MYSQL: aiuto select

  1. #1

    MYSQL: aiuto select

    Ciao a tutti,
    come posso fare una select così:

    selezionare il record con il valore più basso tra campo1,campo2,campo3,campo4,campo5 che sia diverso da 0.00

    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 :

    Tabella num - campi => id,n1,n2,n3,n4,n5

    Codice PHP:
    select T1.idmin(T2.nfrom num T1
    INNER JOIN 
    (SELECT id,n1 AS n
    FROM 
    `num`
    WHERE n1 <> 0
    UNION
    SELECT id
    ,n2 AS n
    FROM 
    `num`
    WHERE n2 <> 0
    UNION
    SELECT id
    ,n3 AS n
    FROM 
    `num`
    WHERE n3 <> 0
    UNION
    SELECT id
    ,n4 AS n
    FROM 
    `num`
    WHERE n4 <> 0
    UNION
    SELECT id
    ,n5 AS n
    FROM 
    `num`
    WHERE n5 <> 0) AS T2 on T1.id T2.id
    GROUP BY T1
    .id 
    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
    Utente di HTML.it L'avatar di MySQL
    Registrato dal
    May 2015
    Messaggi
    729
    Quote Originariamente inviata da pegaso22 Visualizza il messaggio
    Ciao a tutti,
    come posso fare una select così:

    selezionare il record con il valore più basso tra campo1,campo2,campo3,campo4,campo5 che sia diverso da 0.00

    Fatemi sapere.
    Grazie mille.
    Io userei un LEAST ed un approccio BigM
    Non mi è chiarissimo se ogni campo-k deve essere diverso da zero, oppure se deve esserlo il minimo.
    Se ho interpretato bene...
    codice:
    select * from tabella
    order by
    least(if(campo1=0,greatest(max(campo1),max(campo2),max(campo3),max(campo4),max(campo5))+1,campo1),if(campo2=0,greatest(max(campo1),max(campo2),max(campo3),max(campo4),max(campo5))+1,campo2),if(campo3=0,greatest(max(campo1),max(campo2),max(campo3),max(campo4),max(campo5))+1,campo3),if(campo4=0,
    greatest(max(campo1),max(campo2),max(campo3),max(campo4),max(campo5))+1,campo4),if(campo5=0,greatest(max(campo1),max(campo2),max(campo3),max(campo4),max(campo5))+1,campo5))
    limit 1
    Vabbè faccio fatica a scrivere la query.
    Comunque la logica è: dato un BigM, che puoi fissare a mano (es. 1000000) se puoi, oppure che puoi
    calcolare come greatest(max(campo1),...max(campon))+1, testi se zero, nel qual caso torni bigm, oppure il campo.
    Fai il least, ordina su questo campo, limit 1 e prendi il minimo
    Ultima modifica di MySQL; 08-05-2015 a 21:58

  4. #4
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,372
    Non avevo letto tutto. Comunque.

    Codice PHP:
    select FROM num as T0
    INNER JOIN 
    (
      
    SELECT T1.idmin(T2.n) AS minimo FROM num T1
      INNER JOIN 
    (     
       
    SELECT id,n1 AS n FROM `numWHERE n1 <> 0 UNION
       SELECT id
    ,n2 AS n FROM `numWHERE n2 <> 0 UNION
       SELECT id
    ,n3 AS n FROM `numWHERE n3 <> 0 UNION
       SELECT id
    ,n4 AS n FROM `numWHERE n4 <> 0 UNION
       SELECT id
    ,n5 AS n FROM `numWHERE n5 <> 0
      
    ) AS T2 on T1.id T2.id
      GROUP BY T1
    .id
    ) AS T3 on T0.id T3.id
    HAVING min
    (T3.minimo
    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

  5. #5
    Potresti spiegarmi un po la query?

    Faccio alcuni esempi e modifico qualcosa indicato sopra:

    ESEMPIO1:

    Record id 1 ita:
    prezzo1 = 100
    prezzo2 = 200

    Record id 1 ing:
    prezzo1 = 50
    prezzo2 = 400

    Record id 2 ita:
    prezzo1 = 80
    prezzo2 = 200

    Record id 2 ing:
    prezzo1 = 0
    prezzo2 = 400

    In questo caso deve prendere record id 1 lingua ing (perchè prezzo1 è il più basso perchè va escluso prezzo 0).


    ESEMPIO2:

    Record id 1 ita:
    prezzo1 = 0
    prezzo2 = 20

    Record id 1 ing:
    prezzo1 = 150
    prezzo2 = 300

    Record id 2 ita:
    prezzo1 = 80
    prezzo2 = 200

    Record id 2 ing:
    prezzo1 = 0
    prezzo2 = 400

    In questo caso deve prendere record id 1 lingua ita (perchè prezzo2 è il più basso perchè va escluso prezzo 0).

    Quindi praticamente deve prendere il prezzo più basso tra i vari record controllando tra i campi prezzo1 e prezzo2.

  6. #6
    Volendo, per semplificare, potrebbe anche bastarmi un controllo solo sul campo prezzo1.
    Però ho prezzo1ita e prezzo1ing (che realmente sono 5..ita, ing,spa,ted e fra... ma per l'esempio ovviamente mi bastano 2 lingue).
    Quindi rispetto all'esempio di sopra si elimina il controllo su prezzo2... praticamente torniamo alla versione iniziale.
    Io faccio tutto in ASP... possiamo rivedere la query?

  7. #7
    resta sempre che il valore zero va escluso

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.