Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1
    Utente di HTML.it L'avatar di strae
    Registrato dal
    Apr 2008
    Messaggi
    407

    [MYSQL query] Dubbio su query 'range'

    ciao, ho una tabella con delle quantità, ad esempio 10, 100, 1000

    ora, io devo trovare la quantità che più si avvicina a $x per difetto, cioè:

    $x = 99; //quantità = 100;
    $x = 100; //qunatità = 100;
    $x = 101; //qunatità = 1000;

    io finora ho sempre fatto con 2 query, la prima che cercavo l'approsimazione per difetto, e nel caso non trovasse risultato ($x = 1001 che mi prendesse la quantità più alta.

    Codice PHP:
    $querymysql_query("
    SELECT qnt
    FROM tabella
    WHERE qnt <= '
    $x'
    ORDER BY qnt DESC
    LIMIT 1
    "
    );

    if(
    mysql_num_rows($prima) == 0){
      
    $querymysql_query("
      SELECT qnt
      FROM tabella
      ORDER BY qnt DESC
      LIMIT 1
      "
    );

    si riesce a risolvere con un'unica query?
    You HAVE to assume your visitor is a maniac serial killer, out to destroy your application. And you have to prevent it.
    I can accept failure, everyone fails at something - But I can't accept not trying.

  2. #2
    se non ricordo male bisognerebbe fare una query nidfificata ossia una select in un'altra select beh una cosa del genere dalla teoria di qualche anno fa...

    http://digilander.libero.it/strocchi...r/sql/sql.html

    scendi giù trovi le query nidificate

  3. #3
    non sono certo di aver capito benissimo.... in pratica tu vuoi trovare la qnt = o qnt subito maggiore di $x...

    basterebbe eseguire:

    codice:
    SELECT qnt
    FROM tabella
    WHERE qnt >= '$x'
    ORDER BY qnt ASC
    LIMIT 1

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

  4. #4
    Utente di HTML.it L'avatar di ade_v
    Registrato dal
    Jan 2001
    Messaggi
    459
    Codice PHP:
    SELECT qnt
    FROM tabella
    WHERE 
    IF(qnt <= '$x'qntqnt='$x')
    ORDER BY qnt DESC
    LIMIT 1 
    Spiegazione dell'uso di IF:
    IF(exp1,exp2,exp3) :
    exp1 è la condizione da verificare: se è true qnt vale exp2 altrimenti vale exp3

    dovrebbe andare bene
    ade_v@yahoo.it

    Fletto i muscoli e sono nel vuoto

    Se inviate messaggi privati, avvisatemi sul forum...

  5. #5
    Utente di HTML.it L'avatar di strae
    Registrato dal
    Apr 2008
    Messaggi
    407
    Originariamente inviato da serdominik
    se non ricordo male bisognerebbe fare una query nidfificata ossia una select in un'altra select beh una cosa del genere dalla teoria di qualche anno fa...

    http://digilander.libero.it/strocchi...r/sql/sql.html

    scendi giù trovi le query nidificate
    si ci avevo già pensato, ma in questo caso credo sia necessario una spece di IF nella query, qualcosa del tipo

    SELECT qnt
    FROM tabella
    WHERE IF EXIST(
    SELECT id FROM tabella WHERE qnt <= '$x' ORDER BY qnt DESC LIMIT 1
    ) ELSE ( SELECT id FROM tabella ORDER BY qnt DESC LIMIT 1)

    naturalmente è inventato, ma la logica credo sia corretta
    You HAVE to assume your visitor is a maniac serial killer, out to destroy your application. And you have to prevent it.
    I can accept failure, everyone fails at something - But I can't accept not trying.

  6. #6
    Utente di HTML.it L'avatar di ade_v
    Registrato dal
    Jan 2001
    Messaggi
    459
    leggi sopra
    ade_v@yahoo.it

    Fletto i muscoli e sono nel vuoto

    Se inviate messaggi privati, avvisatemi sul forum...

  7. #7
    Utente di HTML.it L'avatar di strae
    Registrato dal
    Apr 2008
    Messaggi
    407
    Originariamente inviato da ade_v
    leggi sopra
    si e no, il problema è che in base all'IF mi dovrebbe cambiare anche l'ordinamento.
    @piero: si, hai ragione, ho sbagliato io a scrivere il primo esempio, come dici te funzione ma nel caso che $x = 1001 non mi restituisce nessun valore, e devo quindi fare la seconda query per rpendere il valore di qnt più alto.

    cerco di spiegarmi meglio:
    Codice PHP:
    id qnt
    10
    100
    1000 
    avrò i risultati:

    Codice PHP:
    SELECT qnt FROM tabella WHERE qnt >= '$x' ORDER BY qnt ASC LIMIT 1
    $x 
    9//risultato 10, ok;
    $x 10//risultato 10, ok;
    $x 11//risultato 100, ok;
    $x 1001//nessun risultato, necessaria seconda query

    SELECT qnt FROM tabella WHERE IF(qnt <= '$x'qntqnt='$x'ORDER BY qnt DESC LIMIT 1
    $x 
    9//nessun risultato
    $x 10//risultato 10, ok;
    $x 11//risultato 10, errore!;
    $x 1001//risultato 1000, ok; 
    mentre i risultati che dovrei ottenere sono

    Codice PHP:
    $x 9//risultato 10
    $x 10//risultato 10
    $x 11//risultato 100
    $x 1001//risultato 1000 
    ho provato con

    Codice PHP:
    SELECT qnt
    FROM tabella
    WHERE 
    IF(
        
    '$x' <= qnt,
        ( 
    SELECT qnt FROM tabella WHERE '$x' <= qnt ORDER BY qnt DESC LIMIT 1 ),
        ( 
    SELECT qnt FROM tabella WHERE '$x' qnt ORDER BY qnt ASC LIMIT 1 )
    )
    LIMIT 1 
    ma niente, mi restituisce sempre 10
    You HAVE to assume your visitor is a maniac serial killer, out to destroy your application. And you have to prevent it.
    I can accept failure, everyone fails at something - But I can't accept not trying.

  8. #8
    Utente di HTML.it L'avatar di ade_v
    Registrato dal
    Jan 2001
    Messaggi
    459
    Codice PHP:
    SELECT qnt FROM tabella WHERE IF(qnt <= '$x'qntqnt>'$x'ORDER BY qnt DESC LIMIT 1 
    ade_v@yahoo.it

    Fletto i muscoli e sono nel vuoto

    Se inviate messaggi privati, avvisatemi sul forum...

  9. #9
    Utente di HTML.it L'avatar di strae
    Registrato dal
    Apr 2008
    Messaggi
    407
    Originariamente inviato da ade_v
    Codice PHP:
    SELECT qnt FROM tabella WHERE IF(qnt <= '$x'qntqnt>'$x'ORDER BY qnt DESC LIMIT 1 
    ehm.. no..

    restituisce sempre 1000...
    You HAVE to assume your visitor is a maniac serial killer, out to destroy your application. And you have to prevent it.
    I can accept failure, everyone fails at something - But I can't accept not trying.

  10. #10
    Utente di HTML.it L'avatar di ade_v
    Registrato dal
    Jan 2001
    Messaggi
    459
    ehm.. no..

    restituisce sempre 1000...
    restituisce mille quando $x vale cosa ?

    Puoi riportare i risultati come hai fatto prima, per favore ?
    ade_v@yahoo.it

    Fletto i muscoli e sono nel vuoto

    Se inviate messaggi privati, avvisatemi sul forum...

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.