Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it L'avatar di tapu
    Registrato dal
    May 2008
    Messaggi
    885

    ricerca con WHERE di un operazione nella select.

    Ciao a tutti.

    Ho una query dove viene effettuato un calcolo matematico tra più campi.

    il mio problema è :

    come faccio ad effettuare una ricerca su un dato risultato che non sia un campo di tabella?

    SELECT
    a.primo_val-a.secondo_val as valore,
    a.nome,
    b.cognome,
    (SELECT //subquery) as prima_sub,
    FROM tabella_A.utente as a, tabella_B as b
    WHERE b.id = a.id
    AND valore LIKE '%".$valore."%';

    più o meno la struttura è quella rappresentata.


    ho provato a mettere il valore il una variabile

    @val = a.primo_val-a.secondo_val as valore,
    //tutta la query
    AND @val LIKE '%".$val."%'

    ma anche cosi non funziona ...

    qualcuno ha qualche idea?


    Grazie delle risposte,


    ciao

  2. #2
    select a+b from tabella where a+b=x

    anche per la where devi mettere l'operazione

  3. #3
    Utente di HTML.it L'avatar di tapu
    Registrato dal
    May 2008
    Messaggi
    885
    grazie,

    cosi facendo il calcolo viene effettuato 2 volte , uno nella select e l'altro nel where.
    visto che la query è pesante di suo e il calcolo in realtà è leggermente piu complesso volevo evitare di mettere il calcolo anche nel WHERE, e per questo che avevo pensato alle variabili, ma non capisco perchè in fase di ricerca non trovi nulla

    SELECT
    @a := 5+4,
    //resto query
    WHERE @a LIKE '%17%'

    il risultato è un bel recordset vuoto.

  4. #4
    Originariamente inviato da tapu
    SELECT
    @a := 5+4,
    //resto query
    WHERE @a LIKE '%17%'
    capisci da solo che se ci nascondi pezzi di query ci riesce difficile aiutarti

  5. #5
    Utente di HTML.it L'avatar di tapu
    Registrato dal
    May 2008
    Messaggi
    885
    codice:
    SELECT IF(CONVERT(((a.val_a-a.val_b)/IF(a.val_b = 0,1,a.val_b))*100,decimal(2,0)) >0,0 ,CONVERT(((a.val_a-a.val_b)/IF(a.val_b = 0,1,a.val_b))*100,decimal(2,0))) as conteggio, a.*,m.*,
    
    (
       SELECT GROUP_CONCAT(CONVERT(c.campo_c,char(100)),CONVERT(c.campo_c,char(100))  SEPARATOR  '|') as campo_c FROM utenza.tab_c as c WHERE s.cod = c.cod
    ) as tipo,
    (
      SELECT SUM(if((visto = 1),6,1)) from mot.visual as c where c.cod = s.cod group by c.cod
    ) as ordine 
    FROM tabella_utente.utente as a, tabella_s as s 
    WHERE a.cod = c.cod 
    ".$where." order by ".$sidx." ".$sord." LIMIT ".$start." , ".$limit.";
    questa è la query finale.

    questo blocco
    codice:
    SELECT IF(CONVERT(((a.val_a-a.val_b)/IF(a.val_b = 0,1,a.val_b))*100,decimal(2,0)) >0,0 ,CONVERT(((a.val_a-a.val_b)/IF(a.val_b = 0,1,a.val_b))*100,decimal(2,0))) as conteggio
    non mi piace per nulla, nella where ci sarà tutto questo calcolo con il like
    codice:
    WHERE IF(CONVERT(((a.val_a-a.val_b)/IF(a.val_b = 0,1,a.val_b))*100,decimal(2,0)) >0,0 ,CONVERT(((a.val_a-a.val_b)/IF(a.val_b = 0,1,a.val_b))*100,decimal(2,0))) LIKE '%".$valore."%'
    avevo pensato di mettere tutto in una variabile
    codice:
    SELECT @variabile :=  IF(CONVERT(((a.val_a-a.val_b)/IF(a.val_b = 0,1,a.val_b))*100,decimal(2,0)) >0,0 ,CONVERT(((a.val_a-a.val_b)/IF(a.val_b = 0,1,a.val_b))*100,decimal(2,0))) as conteggio
    per poi poterla usare nel where
    codice:
    WHERE @variabile LIKE '%".$valore."%'
    la query senza quel where restituisce i record attesi, ma se effettuo una ricerca non mi restituisce nessun record.

    Grazie ...

    ciao

  6. #6
    se invece usi l'opzione "lunga" (senza cioè la variabile) funzia?

  7. #7
    Utente di HTML.it L'avatar di tapu
    Registrato dal
    May 2008
    Messaggi
    885
    si , se inserisco il calcolo sia nella SELECT che nel WHERE mi restituisce i record correttamente

  8. #8
    quindi... a meno che qualche mago di MySql non ti indichi una alternativa

  9. #9
    Utente di HTML.it L'avatar di tapu
    Registrato dal
    May 2008
    Messaggi
    885
    hehehe, io ho provato :=

    Cmq grazie del supporto

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