Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it L'avatar di renzoz
    Registrato dal
    May 2001
    Messaggi
    305

    [MYSQL] aiuto su query con più tabelle

    Ciao, ho queste 3 tabelle:

    CREATE TABLE `catalogow` (
    `idx` int(11) NOT NULL auto_increment,
    `cod` varchar(255) NOT NULL default '',
    `idcategoria` int(11) NOT NULL default '0',
    `idregione` int(11) NOT NULL default '0',
    `etichetta` varchar(255) NOT NULL default '',
    `cantina` varchar(255) NOT NULL default '',
    `formato` decimal(4,3) NOT NULL default '0.000',
    `annata` varchar(255) NOT NULL default '',
    `prezzo` decimal(4,2) NOT NULL default '0.00',
    `dsc_it` text NOT NULL,
    `dsc_en` text NOT NULL,
    PRIMARY KEY (`idx`)
    ) TYPE=MyISAM AUTO_INCREMENT=1098 ;

    CREATE TABLE `categoriew` (
    `idc` int(11) NOT NULL auto_increment,
    `categoria` varchar(64) NOT NULL default '',
    PRIMARY KEY (`idc`)
    ) TYPE=MyISAM AUTO_INCREMENT=19 ;

    CREATE TABLE `regionisw` (
    `idr` int(11) NOT NULL auto_increment,
    `nomer` varchar(32) NOT NULL default '',
    PRIMARY KEY (`idr`)
    ) TYPE=MyISAM AUTO_INCREMENT=52 ;


    Ho questa query per estrapolarmi tutti i dati di un prodotto compresa la categoria e la regione che sono residenti nelle rispettive 2 tabelle:

    $qsp = "SELECT catalogow.cod, catalogow.idcategoria, catalogow.idregione, catalogow.etichetta, catalogow.cantina,
    catalogow.formato, catalogow.annata, catalogow.prezzo, catalogow.dsc_it, categoriew.categoria, regionisw.nomer
    FROM catalogow, categoriew, regionisw
    WHERE catalogow.idx='$_GET[id]' AND categoriew.idc=catalogow.idcategoria AND regionisw.idr=catalogow.idregione";


    però se, ad esempio, l'id regione o l'id categoria sono a 0 sulla tabella catalogow non mi fa vedere il prodotto e questo penso sia dovuto alla clausola AND.

    Io vorrei che mi facesse vedere i dati di quel prodotto anche se non sono stati imnpostati i valori per le tabelle esterne.

    ho fatto un'altra query ma non va bene neanche questa poichè non mi estrae la regione anche se è presente sulla tab. regionisw:

    SELECT catalogow.cod, catalogow.idcategoria, catalogow.idregione, catalogow.etichetta, catalogow.cantina,
    catalogow.formato, catalogow.annata, catalogow.prezzo, catalogow.dsc_it, categoriew.categoria, regionisw.nomer
    FROM catalogow LEFT JOIN categoriew, regionisw
    ON categoriew.idc=catalogow.idcategoria AND regionisw.idr=catalogow.idregione
    WHERE catalogow.idx='$_GET[id]'


    In pratica vorrei che assieme ai dati del 'catalogow' mi estrapolasse anche le colonne delle 2 tabelle 'regionisw' e 'categoriew' sul singolo articolo.

    Chiedo troppo?

  2. #2
    codice:
    SELECT 
       catalogow.cod, catalogow.idcategoria, catalogow.idregione,
       catalogow.etichetta, catalogow.cantina,
       catalogow.formato, catalogow.annata, catalogow.prezzo, 
       catalogow.dsc_it, categoriew.categoria, regionisw.nomer 
    FROM 
       catalogow LEFT JOIN categoriew
            ON categoriew.idc=catalogow.idcategoria 
       LEFT JOIN regionisw
            ON categoriew.idc=regionisw.idregione
    WHERE 
       catalogow.idx=$_GET[id]
    prova così

  3. #3
    Usando LEFT JOIN dovresti ottenere quello che cerchi...

    codice:
    SELECT *
    FROM catalogow as ct
    LEFT JOIN categoriew as cg ON cg.idc = ct.idcategoria
    LEFT JOIN regionisw as rg ON rg.idr = ct.idregione
    WHERE
    ct.idx = '$_GET[id]'
    ti conviene usare l'alias per il nome tabella
    ... eventualmente prova a sostituire il LEFT JOIN con RIGHT JOIN perche' sinceramente... non l'ho guardato piu' di tanto...



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

  4. #4
    Va be... sono arrivato secondo...

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

  5. #5
    piero, scusa se sono OT,

    mi spiegheresti la differenza tra LEFT JOIN e RIGHT JOIN...???


    ciaooooo
    Ciao!

  6. #6
    Utente di HTML.it L'avatar di renzoz
    Registrato dal
    May 2001
    Messaggi
    305
    Ragazzi siete GRANDI

    gRAZIE 1000, funzia a meraviglia.

    PS anche io non ho chiaro il concetto di LEFT/RIGHT JOIN

  7. #7
    Originariamente inviato da fmortara
    piero, scusa se sono OT,
    mi spiegheresti la differenza tra LEFT JOIN e RIGHT JOIN...???
    ciaooooo
    from tab1 tab1 e' la tabella di SX

    LEFT prende tutti i record della tabella di SX

    da unire con la tabella:
    JOIN tab2 che e' la tabella di DX
    ON tab2.id = tab1.id E' la condizione della unione.

    Siccome prende TUTTI i record della tabella designata da LEFT rendera' NULL nella tabella opposta in mancanza della condizione di unione. RIGHT inverte il tutto prendendo tutti i record della tabella di DESTRA.

    Leggendo adesso per darti la risposta e' evidente che le tabelle che potrebbero non avere corrispondenze sono categoria e regioni, prendendo catalogo come tabella di SX sei sicuro di prendere TUTTI i record relazionati. Se una delle due tabelle categoria o regioni rendesse un NULL, quel record corrispondente di catalogo sarebbe inconsistente.

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