Visualizzazione dei risultati da 1 a 2 su 2

Discussione: JOIN senza esclusioni

  1. #1

    JOIN senza esclusioni

    ciao a tutti, ho un problema con una SELECT un po' complessa. Vado subito al problema, ho due tabelle:
    la prima
    CREATE TABLE `farma_fidelity` (
    `ID_fidelity` int(6) unsigned NOT NULL auto_increment,
    `numero` int(15) NOT NULL default '0',
    `nome` varchar(155) NOT NULL default '',
    `nascita` varchar(155) NOT NULL default '',
    `indirizzo` varchar(155) NOT NULL default '',
    `cap` varchar(155) NOT NULL default '',
    `localita` varchar(155) NOT NULL default '',
    `provincia` varchar(155) NOT NULL default '',
    `telefono` varchar(155) NOT NULL default '',
    `mobile` varchar(155) default NULL,
    `email` varchar(155) NOT NULL default '',
    KEY `ID_fidelity` (`ID_fidelity`),
    KEY `numero` (`numero`),
    FULLTEXT KEY `nome` (`nome`)
    );

    e la seconda

    CREATE TABLE `farma_punti` (
    `id_farmapunti` int(6) NOT NULL auto_increment,
    `numero_fidelity` varchar(255) NOT NULL default '',
    `data` varchar(10) NOT NULL default '',
    `prezzo` varchar(255) NOT NULL default '',
    KEY `id_farmapunti` (`id_farmapunti`)
    );

    nella pagina php ho la seguente query

    Codice PHP:
    SELECT *, SUM(prezzo) as topCOUNT(DISTINCT(farma_punti.data)) AS avg FROM farma_fidelity INNER JOIN farma_punti ON farma_fidelity.numero farma_punti.numero_fidelity WHERE farma_fidelity.nome like '$_GET[i]%%' GROUP BY numero 
    Il mio problema è che con questo tipo di JOIN se nella tabella farma_punti non sono presenti record collegati alla tabella farma_fidelity alcuni record di quest'ultima non vengono selezionati. Ho provato allora ad usare LEFT JOIN che mi dovrebbe estrarre i record tralasciati ma il sistema entra in palla e mi da l'errore "max execution time".

    Potreste dirmi se esiste un modo per includere anche tutti i record della tabella farma_fidelity?

  2. #2
    Utente di HTML.it L'avatar di luca200
    Registrato dal
    Apr 2002
    Messaggi
    4,120
    Usare la left join è corretto.
    Il problema dell'execution time (che peraltro, se non interpreto male quello che scrivi, dipende da php, non da mysql) è legato al fatto che il tuo database è strutturato da bestia.
    A parte l'anomalia del campo 'numero' int(15) (non esistono interi di 15 cifre...), per quale santissimo motivo numero_fidelity è un varchar!?!?!?
    Fai in modo che i due campi siano uguali come struttura, e crea un indice anche su numero_fidelity, che ora non c'è. Vedrai come sparisce il max_execution_time

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.