2009-12-01 45 views
1

以下行提供錯誤消息。mySQL加入問題

$query = 'SELECT * FROM products AS p LEFT JOIN categories AS c USING ON c.id = p.category_id WHERE c.name = "Galleri1" 
AND p.status = "active"' ; 
$Q = $this->db->query($query); 

數據庫結構。 類別

CREATE TABLE IF NOT EXISTS `categories` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `name` varchar(255) NOT NULL, 
    `shortdesc` varchar(255) NOT NULL, 
    `longdesc` text NOT NULL, 
    `status` enum('active','inactive') NOT NULL, 
    `parentid` int(11) NOT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=15 ; 
... 
... 

PRODUCT

CREATE TABLE IF NOT EXISTS `products` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `name` varchar(255) NOT NULL, 
    `shortdesc` varchar(255) NOT NULL, 
    `longdesc` text NOT NULL, 
    `thumbnail` varchar(255) NOT NULL, 
    `image` varchar(255) NOT NULL, 
    `class` varchar(255) DEFAULT NULL, 
    `grouping` varchar(16) DEFAULT NULL, 
    `status` enum('active','inactive') NOT NULL, 
    `category_id` int(11) NOT NULL, 
    `featured` enum('true','false') NOT NULL, 
    `price` float(4,2) NOT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=20 ; 

錯誤消息

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'ON c.id = p.category_id WHERE c.name = "Galleri1" AND p.status = "active"' at line 1 

SELECT * FROM products AS p LEFT JOIN categories AS c USING ON c.id = p.category_id WHERE c.name = "Galleri1" AND p.status = "active" 

Q1。任何人都可以指出我的錯誤嗎? Q2302。任何人都可以告訴我如何在Codeigniter的Active Record類中編寫此代碼?

在此先感謝。

回答

2

使用單引號,擺脫USING,使JOIN內:

SELECT * 
FROM products AS p 
JOIN categories AS c 
ON  c.id = p.category_id 
WHERE c.name = 'Galleri1' 
     AND p.status = 'active' 
  • 雙引號用來標記你的表和列名使用保留字。字符串文字應該被括在單引號中。

  • JOIN USING (col1)表示您在這兩個表中都有一個名爲col1的字段,並且希望加入它。如果不這樣做,你應該使用JOIN ON

  • 配售這一條件c.name = 'Galleri1'WHERE條款使得LEFT JOIN作爲INNER JOIN將返回完全相同的記錄。後者更有效率(因爲優化器可以選擇哪個表來引導連接)。

+0

感謝。它解決了這個問題。但我得到了另一個。在此查詢之後,如果($ Q-> num_rows()> 0)foreach($ Q-> result_array()爲$ row){ $ data = array( \t「id」=> $ row [' ID '], \t \t 「名」=> $行[' 名稱 '], \t 「shortdesc」=> $行[' shortdesc'], \t \t ... \t \t 「類別」=> $行['categories.name'] 我得到最後一個錯誤。如何分配類別的名稱? – shin

+0

'@ shin':你最好把它作爲另一個問題發佈。 – Quassnoi

+0

好吧。我在這裏發佈。 http:///stackoverflow.com/questions/1828406/如何對獲取數據從 - 一個連表 – shin

0

USINGON有兩種不同的方式對特定的列來執行與加盟。您的查詢指定了兩者,但看起來您正在嘗試使用ON語法。請嘗試以下操作:

SELECT * FROM products AS p LEFT JOIN categories AS c ON c.id = p.category_id WHERE c.name = "Galleri1"