Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1

    Non riesco a fare le query con lo JOIN

    Buon giorno a tutti voi....

    Tengo la mia tabella prodotti che ha 4 id di altretante tabelle cioè semplicemente:
    Prodotti->Categoria
    Prodotti->Tabella 1
    Prodotti->Tabella 2
    Prodotti->Tabella 3

    Tabella 1 -> Tabella 2 -> Tabella 3

    In sostanza l'associazione delle tabelle va dalla 1 poi alla 2 e poi alla 3

    Non riesco a fare la ricerca su 5 tabelle con lo join io provo così:
    Codice PHP:
    "SELECT P.id_prodotto,P.codice_p,P.titolo_p,P.id_categoria,P.id_comune,P.id_provincia,P.id_regione,CAT.name,C.nome,PRO.nome,R.nome
    FROM 
    $table_prodotti as P JOIN wp_1_terms as CAT ON P.id_categoria = CAT.term_id
    LEFT JOIN 
    $table_comuni as C ON P.id_comune = C.codice
    LEFT JOIN 
    $table_province as PRO ON P.id_comune = PRO.codice
    LEFT JOIN 
    $table_regioni as R ON P.id_provincia = R.codice 
    WHERE (P.codice_p LIKE '%
    {$ric}%' || P.titolo_p LIKE '%{$ric}%' || C.nome LIKE '%{$ric}%' || PRO.nome LIKE '%{$ric}%' || PRO.sigla LIKE '%{$ric}%' || R.nome LIKE '%{$ric}%'
    || CAT.name LIKE '%
    {$ric}%')
    ORDER BY P.titolo_p " 
    please help me!

  2. #2
    in poche parole a me serve che quando faccio una ricerca questa vada a controllare ogni campo di ogni tabella non so se avete capito cosa voglio dire

  3. #3
    non dici "cosa" non va, ma per certo i seguenti campi si sovrascrivono e ricevi solo l'ultimo:

    C.nome, PRO.nome, R.nome

    devi assegnare un alias per la colonna "nome" nella selezione dei campi.

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

  4. #4

  5. #5
    non ho mai usato le query join solo che credo nel mio caso mi serve.

    non mi restituisce un array completo come vorrei a me mi serve una decina di campi da visulizzare che si trovano su 5 tabelle

    e poi fare una ricerca su tutti i campi delle 5 tabelle

  6. #6
    Originariamente inviato da serdominik
    in ke senso l'alias?
    se hai tre campi che si chiamano "nome" riceverai solo l'ultimo. In "ke" senso dovresti saperlo visto che li stai anche usando nella query

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

  7. #7
    molto + semplicemente e velocemente per me sarebbe di estrarre i dati dalla tabella prodotti poi nel ciclo while fare le query sulle altre tabelle per poi pescarmi i dati che mi serve delle altre tabelle e visualizzarli ma come forse sapete tutti questo non è una soluzione ottimale dove occhio e croce dovrei fare 4 query per ogni riga della tabella prodotti non credo che sia troppo bella sta cosa....

    pensavo che facendo una bella query join su 5 tabelle fosse + facile

  8. #8
    Originariamente inviato da piero.mac
    se hai tre campi che si chiamano "nome" riceverai solo l'ultimo. In "ke" senso dovresti saperlo visto che li stai anche usando nella query
    no veramente mi restituisce un campo vuoto guarda qui
    Codice PHP:
    if (isset($_GET['s'])) {
    $ric=stripslashes($_GET['s']);
    $query="SELECT P.titolo_p,P.id_categoria,P.id_comune,P.id_provincia,P.id_regione,CAT.name,C.nome,PRO.nome,R.nome
    FROM 
    $table_prodotti as P JOIN wp_1_terms as CAT ON P.id_categoria = CAT.term_id
    LEFT JOIN 
    $table_comuni as C ON P.id_comune = C.codice
    LEFT JOIN 
    $table_province as PRO ON P.id_comune  = PRO.codice
    LEFT JOIN 
    $table_regioni as R ON P.id_provincia  = R.codice 
    WHERE (P.codice_p LIKE '%
    {$ric}%' || P.titolo_p LIKE '%{$ric}%' || C.nome LIKE '%{$ric}%' || PRO.nome LIKE '%{$ric}%' || PRO.sigla LIKE '%{$ric}%' || R.nome LIKE '%{$ric}%'
    || CAT.name LIKE '%
    {$ric}%')
    ORDER BY P.titolo_p "
    ;
    //$query="SELECT id_prodotto, codice_p, titolo_p, id_categoria, id_comune, id_provincia, id_regione FROM $table_prodotti WHERE (codice_p LIKE '%{$ric}%' || titolo_p LIKE '%{$ric}%' ) ORDER BY titolo_p ";
    } else {
    $query="SELECT P.*
    FROM 
    $table_prodotti as P JOIN wp_1_terms as CAT ON P.id_categoria = CAT.term_id
    LEFT JOIN 
    $table_comuni as C ON P.id_comune = C.codice
    LEFT JOIN 
    $table_province as PRO ON P.id_comune  = PRO.codice
    LEFT JOIN 
    $table_regioni as R ON P.id_provincia  = R.codice 
    ORDER BY P.titolo_p "
    ;

    /*$query="SELECT P.codice_p,P.titolo_p,P.id_categoria,P.id_comune,P.id_provincia,P.id_regione,CAT.name,C.nome,PRO.nome,R.nome
    FROM $table_prodotti as P, $table_comuni as C, $table_province as PRO, $table_regioni as R, wp_1_terms as CAT
    WHERE P.id_comune = C.codice && P.id_comune = PRO.codice && P.id_provincia = R.codice && P.id_categoria = CAT.term_id
    ORDER BY P.titolo_p ";*/
    }
    $empty_td='<td width="35%" align="left" valign="middle" height="25"></td>';
    if (!isset(
    $_GET['nav'])) $_GET['nav']=1;
    $pagina_corrente=$_GET['nav'];
    if (
    $pagina_corrente==""$pagina_corrente=1;
    $lista=array();
    $per_page=10;
    $url=$_SERVER['REQUEST_URI'];
    $pagine= new navigazione($url,$per_page,$pagina_corrente,$query,$query);
    if (
    mysql_num_rows($pagine->result)>0){
        
    $totale_oggetti=mysql_num_rows($pagine->result);
        
    $q=0;    
        
    $campi=array('P.codice_p','P.titolo_p','P.id_categoria','P.id_comune','P.id_provincia','P.id_regione','CAT.name','C.nome','PRO.nome','R.nome');
        while (
    $row_result=mysql_fetch_array($pagine->result)){
            if (
    $q<=$pagine->quanti){                    
                
    $a=0;
                foreach (
    $campi as $key){
                    
    $lista[$q][$key]=$row_result[$a];
                    
    //echo $lista[$q][$key]." - ";            
                    
    $a++;
                }
                
    $q++; 
                
    //echo "
    ";
            } 
            else 
    $test_navigation="null";
        }
    } else {
        
    $totale_oggetti=0;
        
    $messaggio="Spiacente la ricerca delle Aziende non ha prodotto RisultatiSe hai effettuato una ricerca tramite il motore interno prego variare i termini di ricerca.";

    sto facendo tante di quelle prove che forse mi sto confondendo

  9. #9
    Originariamente inviato da serdominik
    molto + semplicemente e velocemente per me sarebbe di estrarre i dati dalla tabella prodotti poi nel ciclo while fare le query sulle altre tabelle per poi pescarmi i dati che mi serve delle altre tabelle e visualizzarli ma come forse sapete tutti questo non è una soluzione ottimale dove occhio e croce dovrei fare 4 query per ogni riga della tabella prodotti non credo che sia troppo bella sta cosa....

    pensavo che facendo una bella query join su 5 tabelle fosse + facile
    se le tabelle sono correttamente relazionate, come pare lo siano, va benissimo fare una select joinata.... ma:

    INNER JOIN ragiona da equi-join cioe' solo i campi che corrispondono
    LEFT JOIN invece compara TUTTI i record della tabella citata in FROM con i soli record che hanno la corrispondenza nella tabella citata in LEFT JOIN. Quelli che non hanno corrispondenza saranno stampati lo stesso ma con valore NULL.

    Formalmente l'errore che hai e' quello di sovrascrivere i campi "nome" e quindi dovresti usare l'alias per questi campi. Per approfondire il resto bisognerebbe conoscere di piu' sul contenuto del database. Magari il problema non e' nella query.

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

  10. #10
    C.nome as c_nome , PRO.nome as pro_nome , R.nome as r_nome

    se non cambi il nome di questi campi puoi far andare il jo-jo fino alla fine del mandato del primo ministro in carica.

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

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.