Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    [MYSQL] Chi può aiutarmi su questa query?

    ho questa query:
    Codice PHP:
    $query="SELECT DISTINCT P.id_prodotto, P.titolo_{$_SESSION['public_vars']['lang']}_p, P.foto_piccola_p, P.facoltativo_1_p, L.id_livello
    FROM prodotti_main as P, livelli as L, associazioni as A 
    WHERE L.id_livello = A.id_livello && A.id_prodotto=P.id_prodotto && (P.titolo_
    {$_SESSION['public_vars']['lang']}_p LIKE '%{$ricerca}%' || P.testo_1_p LIKE '%{$ricerca}%' || P.facoltativo_1_p LIKE '%{$ricerca}%') $ordina"
    se tolgo L.id_livello riesco a pescare tutti i prodotti normalmente mentre invece se lo aggiungo trovo un duplicato ossia utilizzo il sistema di assegnare a un prodotto + di una categoria quindi in questo caso trovo quel prodotto assegnato 2 volte....

    help me

  2. #2
    Non si capisce bene che vuoi dire / fare.

    DISTINCT si estende a tutto il result set e quindi se la query te ne rende svariati e' perche' qualche componente del result set e' differente dagli altri.

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

  3. #3
    allora spiego meglio:

    tengo delle categorie:

    A
    B
    C

    e i miei prodotti

    Pippo --> A
    Paperino -->B
    Pluto -->A
    Topolino -->C

    e li associo alle loro cateorie

    Con il mio sistema posso assegnare a Topolino anche + di una categoria

    quindi
    Topolino -->C
    Topolino -->A
    Topolino -->B

    Per assegnare a + categorie uso una terza tabella tra prodotti e categoria e l'ho chiamata associazioni dove lì tengo gli id dei prodotti e della categoria

    quindi come da condizione alla query
    Codice PHP:
    FROM prodotti_main as Plivelli as Lassociazioni as A
    WHERE L
    .id_livello A.id_livello && A.id_prodotto=P.id_prodotto 
    la tabella livelli sarebbe la tabella categoria

    Questa condizione estraggo tutti i prodotti e anche i sui duplicati perchè trova una differente associazione....

    adesso se tolgo id_livello nella distinzione trovo tutto senza i duplicati
    ma se lo inserisco vedo topolino 3 volte

    adesso a me serve a forza vedere id_livello c'è soluzione in questo mio quesito?

    la query è sbagliata?

  4. #4
    continua ad essere fumosa.... se hai tre record per topolino ma vuoi vedere solo la categoria (livelli), usa group by e non il distinct.

    ma rivedrei anche l'impostazione della query usando JOIN.
    codice:
    select *
    from associazioni as A
    left join prodotti_main as P ON A.id_prodotto = P.id_prodotto
    left join livelli as L ON L.id_livello = A.id_livello
    where 
    (P.titolo_{$_SESSION['public_vars']['lang']}_p LIKE '%{$ricerca}%' 
    || P.testo_1_p LIKE '%{$ricerca}%' 
    || P.facoltativo_1_p LIKE '%{$ricerca}%') 
    group by P.campo, A.campo
    $ordina
    ma attenzione.... nel group by mettici i campi che ti servono e nell'ordine voluto....

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

  5. #5
    Codice PHP:
    select P.id_prodottoP.titolo_{$_SESSION['public_vars']['lang']}_p,
    P.foto_piccola_pP.facoltativo_1_p
    from associazioni 
    as A
    left join prodotti_main 
    as P ON A.id_prodotto P.id_prodotto
    left join livelli 
    as L ON L.id_livello A.id_livello
    where 
    (P.titolo_{$_SESSION['public_vars']['lang']}_p LIKE '%{$ricerca}%' 
    || P.testo_1_p LIKE '%{$ricerca}%' 
    || P.facoltativo_1_p LIKE '%{$ricerca}%'
    group by P.id_prodotto
    $ordina 

    Guarda non riesco proprio a selezionare l'id_livello.... questa query funziona bene ma l'id livello in select non viene preso perchè?

  6. #6
    risolto c'era un errore perchè usavo una memorizzazione dei valori nell'array...
    ho messo nella select A.id_livello e si vedeva grazie mille piero.mac
    la query funge bene



    sn in debito


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