2010-10-08 4 views
0

J'ai omc_projects, omc_logs, omc_specs et omc_files.Comment joindre quatre tables avec MySQL

Toutes les tables omc_logs, omc_specs et omc_files ont un champ appelé project_id.

CREATE TABLE IF NOT EXISTS `omc_projects` (
    `id` int(10) NOT NULL AUTO_INCREMENT, 
    ... 
    PRIMARY KEY (`id`) 
) ... ; 

CREATE TABLE IF NOT EXISTS `omc_files` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `project_id` int(11) NOT NULL, 
... 
    PRIMARY KEY (`id`) 
) ... ; 


CREATE TABLE IF NOT EXISTS `omc_logs` (
    `id` int(10) NOT NULL AUTO_INCREMENT, 
    `project_id` int(10) NOT NULL, 
    ... 
    PRIMARY KEY (`id`) 
) ... ; 


CREATE TABLE IF NOT EXISTS `omc_specs` (
    `id` int(10) NOT NULL AUTO_INCREMENT, 
    `project_id` int(10) NOT NULL, 
    ... 
    ... 
    PRIMARY KEY (`id`) 
) ... ; 

Maintenant, je fais une fonction de suppression dans un modèle pour vérifier s'il y a des fichiers, des spécifications ou des journaux comme celui-ci.

function checkproject($id){ 
// if there are any data in one of table, returns TRUE 

$query = 'SELECT omc_projects.id, omc_specs.id, omc_logs.id, omc_files.id 
FROM omc_projects 
JOIN omc_specs 
     ON omc_specs.project_id = omc_projects.id 
JOIN omc_logs 
     ON omc_logs.project_id = omc_projects.id 
JOIN omc_files 
     ON omc_files.project_id = omc_projects.id 
WHERE omc_projects.id = $id' 

     $query = $this->db->get(); 
     if ($query->num_rows() > 0){    
       return TRUE; 
     }else{ 
      return FALSE; 
     } 
     $query->free_result(); 

    } 

S'il y a même une donnée dans une table, je veux retourner TRUE, et s'il n'y en a pas retourne FALSE.

Cependant, cela fonctionne s'il y a des données dans toutes les tables. S'il y en a un dans specs ou dans d'autres tables, il ne retourne pas TRUE.

Comment devrais-je rejoindre ces tables? GAUCHE ou INTÉRIEUR ??

Merci d'avance.

Répondre

0

Vous devez utiliser outer join.

+0

Vous voulez dire que je dois remplacer JOIN par OUTER JOIN? – shin

+0

@shin, oui c'est ce que je veux dire –

+0

'LEFT JOIN' devrait également le faire. – Narf