2009-12-12 9 views
1

Je souhaite joindre une table de pages et une table de menus.Problème de jointure MySQL

CREATE TABLE IF NOT EXISTS `pages` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `name` varchar(255) NOT NULL DEFAULT '', 
    `keywords` varchar(255) NOT NULL DEFAULT '', 
    `description` varchar(255) NOT NULL DEFAULT '', 
    `path` varchar(255) NOT NULL DEFAULT '', 
    `content` text NOT NULL, 
    `status` enum('active','inactive') NOT NULL DEFAULT 'active', 
    `category_id` int(11) NOT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=21 ; 



CREATE TABLE IF NOT EXISTS `menus` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `name` varchar(255) NOT NULL, 
    `shortdesc` varchar(255) NOT NULL, 
    `page_id` varchar(60) NOT NULL, 
    `status` enum('active','inactive') NOT NULL, 
    `parentid` int(11) NOT NULL, 
    `order` int(11) NOT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=79 ; 

J'ai des erreurs avec le SQL suivant.

function generateTree(&$tree, $parentid = 0) { 
$res = $this->db->query('SELECT M.*, P.name AS PageName 
    WHERE M.parentid = $parentid 
    ORDER BY M.order asc, M.parentid asc 
    FROM menus AS M 
    LEFT JOIN pages AS P 
    ON P.id = M.page_id'); 
... 
... 

Pouvez-vous dire ce que je fais mal?

Merci d'avance.

+0

pouvez-vous afficher le message d'erreur? – Paulraj

Répondre

1

Vous avez votre syntaxe SQL mélangé

$res = $this->db->query(' 
SELECT 
M.*, P.name AS PageName 
FROM 
menus AS M 
LEFT JOIN pages AS P ON P.id = M.page_id 
WHERE 
M.parentid = $parentid 
ORDER BY 
M.order asc, M.parentid asc 
'); 

BTW, vous devez bot utiliser des variables dans la chaîne SQL. Utilisez des requêtes paramétrées à la place (mysyqli *).

+0

Ce ne sont pas les devoirs. Je fais mon CMS avec codeigniter. Merci. – shin

+0

+1 pour recommander des requêtes paramétrées. Une très bonne habitude à prendre! –