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

    Ricerca su piu' tabelle

    Ciao, non so come fare nel modo più efficente possibile una ricerca su piu' tabelle, premetto che uso php da poco piu' di un mese.

    Ho diverse tabelle su mysql, ognuna con varie campi per diversi oggetti, per esempio:

    Tabella: Dimensioni
    nome | altezza | larghezza | profondita | etc
    ______________________________________
    libro | 12 | 34 | 7
    stereo | 55 | 67 | 28
    etc |

    Tabella: caratteristiche
    nome | colore | peso | costo
    ______________________________________
    libro | rosso | 1 | 36
    stereo | blu | 14 | 128
    etc |

    Tabella: varie
    nome | nazione | sconto | promozione
    ______________________________________
    libro | italia | si | no
    stereo | francia | no | si
    etc |


    ecco tenete conto che le tabelle sono 8, dovendo effettuare una ricerca per tutti i campi (il piu' veloce possibile) vorrei capire il sistema migliore per cercare in tutte le tabelle:

    se per esempio con:

    SELECT nome
    FROM Dimensioni
    WHERE altezza = '12' AND larghezza ='34' AND profondita ='7'

    ottengo 22 risultati. libro, tazzina, chiave, etc

    come faccio poi a verificare se questi 22 risultati passano anche le condizioni di filtro per le tabelle successive?

    Insomma se avessi una sola tabella metterei in fila tutte le condizioni nel WHERE, ma con piu tabelle? Sono sicura sia una sciocchezza, ma finche' non la sai... grazie.

  2. #2
    Utente di HTML.it
    Registrato dal
    Oct 2009
    Messaggi
    636
    che relazioni ci sono tra le tabelle?
    cosa vuoi ottenere come risultato?
    Non esiste una sola possibile relazione tra le tabelle ne un solo possibile risultato sii più specifico, e dota ogni tabella di un id univoco come chiave primaria

  3. #3
    che relazioni ci sono tra le tabelle?
    Ehm... veramente non ne ho creata ancora nessuna, ogni tabella ha come chiave primaria il nome del prodotto, nome presente in tutte e 8 le tabelle, come chiave univoca l'id del prodotto, id presente in tutte e 8 le tabelle (es. libro PICCO 1023)

    cosa vuoi ottenere come risultato?
    Se un utente cerca dei prodotti con alcune caratteristiche il sistema deve restituire tutti i prodotti che rientrano in quei filtri. Esempio: prodotti da 100 a 200 euro, blu, alti max 50 centimetri, max kg 5.
    Risultato:

    Libro PICCO 1023: 16 euro, blu, 46cm, 2,2 kg
    Pesa PALLA 17: 99 euro, blu, 33cm, 3 kg
    etc etc

    Non esiste una sola possibile relazione tra le tabelle ne un solo possibile risultato sii più specifico, e dota ogni tabella di un id univoco come chiave primaria
    Capisco, il mio problema è che ho fin ora usato il select where su una sola tabella, alchè ricevevo un array e lo processavo.

    Ma adesso dopo aver fatto una ricerca per la prima tabella sui campi che le competono e dopo aver ricevuto il risultato (per dire 126 prodotti) dovrei andare sulla seconda tabella per ognuno di quei 126 prodotti e filtrarli per i campi della seconda tabella ottenendone per dire 84, poi gli 84 per i campi della terza, etc... ma mi sembra un algoritmo folle. Non so se mi son spiegata... grazie !!

  4. #4
    Utente di HTML.it
    Registrato dal
    Oct 2009
    Messaggi
    636
    prova con

    select *
    from Dimensione natural join caratteristiche natural join varie
    where campo1 = 'valore1' and campo2 = 'valore2' ...

  5. #5
    Utente di HTML.it L'avatar di luca200
    Registrato dal
    Apr 2002
    Messaggi
    4,120

    Re: Ricerca su piu' tabelle

    Originariamente inviato da Chiaramaria
    se avessi una sola tabella metterei in fila tutte le condizioni nel WHERE, ma con piu tabelle?
    E' proprio questo il punto... perché tutte quelle tabelle?

  6. #6
    Originariamente inviato da longilineo
    prova con

    select *
    from Dimensione natural join caratteristiche natural join varie
    where campo1 = 'valore1' and campo2 = 'valore2' ...
    Perfetto, ero arrivata al capitolo 14 del mio manuale ed il 15esimo erano proprio le join di tabelle, ora non dovrei avere più problemi su questo aspetto, grazie longilineo, viceversa....


    Originariamente inviato da luca200

    E' proprio questo il punto... perché tutte quelle tabelle?
    Perche' luca in realtà ogni tabella ha mediamante 20-30 campi e creare una sola tabella con 150 campi di caratteriristiche prodotto mi sembrava eccessivo.
    Per leggibilità le avevo divise raggruppandole per tipologia.
    Visto che siamo in argomento, avevo chiesto ad amici (ma anche loro programmatori amatoriali come me) proprio questa domanda più pratica che teorica.

    Dato una tabella formata da 100.000 prodotti e 150 caratteristiche è meglio utilizzare un unica tabella 100k*150, o per dire 10 tabelle 10k*150 (divido i prodotti per dire in base al nome), 8 tabelle 100k*20 (divito le tabelle per le caratteriristiche dei prodotti, come ho poi fatto) o magari per esempio 80 tabelle 10k*20 (ogni tabella conterrebbe dei gruppi di prodotti in base al nome ed in base a certe caratteristiche)?

    Visto che non devo poter ricercare per nome prodotto , avevo escluso di dividere i prodotti in base al nome e allora ho optato per le 8 tabelle 100k*20.
    Ho fatto bene? Sempre grazie!

  7. #7
    Utente di HTML.it L'avatar di luca200
    Registrato dal
    Apr 2002
    Messaggi
    4,120
    Originariamente inviato da Chiaramaria
    Ho fatto bene?
    No. Dovevi usare una tabella unica.
    I database relazionali si basano sui concetti di entità e relazione, non sulla "praticità", concetto estremamente volatile (sarà poi così pratico, ogni volta che ti serve un attributo, doverti ricordare in che tabella l'hai messo? )

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.