2014-09-29 4 views
-3

Я имею дело с множественными объединениями ... И я не могу делать объединения.Несколько объединений 6 itens

здесь возникает проблема

Столы

CREATE TABLE IF NOT EXISTS `catleathers` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `code` varchar(55) NOT NULL, 
    `name` varchar(55) NOT NULL, 
    PRIMARY KEY (`id`), 
    KEY `id` (`id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=21 ; 

CREATE TABLE IF NOT EXISTS `catsoles` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `code` varchar(55) NOT NULL, 
    `name` varchar(55) NOT NULL, 
    PRIMARY KEY (`id`), 
    KEY `id` (`id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=16 ; 

CREATE TABLE IF NOT EXISTS `products` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `code` varchar(50) NOT NULL, 
    `name` char(255) NOT NULL, 
    `unit` varchar(255) DEFAULT '1', 
    `size` varchar(255) DEFAULT '1', 
    `cost` decimal(25,2) DEFAULT NULL, 
    `price` decimal(25,2) NOT NULL, 
    `alert_quantity` int(11) NOT NULL DEFAULT '20', 
    `image` varchar(255) DEFAULT 'no_image.jpg', 
    `category_id` int(11) NOT NULL, 
    `subcategory_id` int(11) DEFAULT NULL, 
    `catleather_id_a` int(11) NOT NULL, 
    `subcatleather_id_a` int(11) NOT NULL, 
    `catleather_id_b` int(11) NOT NULL, 
    `subcatleather_id_b` int(11) NOT NULL, 
    `catleather_id_c` int(11) NOT NULL, 
    `subcatleather_id_c` int(11) NOT NULL, 
    `catsole_id_a` int(11) NOT NULL, 
    `subcatsole_id_a` int(11) NOT NULL, 
    `catsole_id_b` int(11) NOT NULL, 
    `subcatsole_id_b` int(11) NOT NULL, 
    `catsole_id_c` int(11) NOT NULL, 
    `subcatsole_id_c` int(11) NOT NULL, 
    `sortido` varchar(100) NOT NULL, 
    `lining` varchar(150) NOT NULL, 
    `lining_description` varchar(255) NOT NULL, 
    `sole_a` varchar(255) DEFAULT NULL, 
    `sole_b` varchar(255) DEFAULT NULL, 
    `sole_a_description` varchar(255) DEFAULT NULL, 
    `sole_b_description` varchar(255) DEFAULT NULL, 
    `leather_a` varchar(255) DEFAULT NULL, 
    `leather_b` varchar(255) DEFAULT NULL, 
    `leather_c` varchar(255) DEFAULT NULL, 
    `leather_a_description` varchar(255) DEFAULT NULL, 
    `leather_b_description` varchar(255) DEFAULT NULL, 
    `leather_c_description` varchar(255) DEFAULT NULL, 
    `carts` varchar(100) NOT NULL, 
    `quantity` int(11) DEFAULT NULL, 
    `tax_rate` int(11) DEFAULT NULL, 
    `track_quantity` tinyint(4) DEFAULT '1', 
    `details` varchar(1000) DEFAULT NULL, 
    PRIMARY KEY (`id`), 
    UNIQUE KEY `code` (`code`), 
    KEY `category_id` (`category_id`), 
    KEY `id` (`id`), 
    KEY `id_2` (`id`), 
    KEY `category_id_2` (`category_id`) 
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=79 

Как я могу это сделать нескольких объединений?

 ->join('categories', 'products.category_id=categories.id', 'left') 
     ->join('subcategories', 'products.subcategory_id=subcategories.id', 'left') 


     ->join('catleathers', 'products.catleather_id_a=catleathers.id', 'left') 
     ->join('subcatleathers', 'products.subcatleather_id_a=subcatleathers.id', 'left') 

     ->join('catleathers', 'products.catleather_id_b=catleathers.id', 'left') 
     ->join('subcatleathers', 'products.subcatleather_id_b=subcatleathers.id', 'left') 

     ->join('catleathers', 'products.catleather_id_c=catleathers.id', 'left') 
     ->join('subcatleathers', 'products.subcatleather_id_c=subcatleathers.id', 'left') 

     ->join('catsoles', 'products.catsole_id_a=catsoles.id', 'left') 
     ->join('subcatsoles', 'products.subcatsole_id_a=subcatsoles.id', 'left') 

     ->join('catsoles', 'products.catsole_id_b=catsoles.id', 'left') 
     ->join('subcatsoles', 'products.subcatsole_id_b=subcatsoles.id', 'left') 

     ->join('catsoles', 'products.catsole_id_c=catsoles.id', 'left') 
     ->join('subcatsoles', 'products.subcatsole_id_c=subcatsoles.id', 'left') 

     ->join('tbl_lining', 'products.lining=tbl_lining.id', 'left') 

     ->group_by("products.id"); 

Кто-то может дать мне руку с этим кратным соединением?

+0

Можете ли вы предоставить схему (определения таблиц) и пример вывода, который вы хотите получить? – StingyJack

+0

Когда я говорю определение таблицы, я имею в виду что-то вроде этого ... http://www.w3schools.com/sql/sql_create_table.asp. Вещь в вашем вопросе - это список столбцов, определяющих набор результатов, а не таблицу. – StingyJack

+0

Спасибо Вот он идет мне нужно, чтобы отобразить данные в таблице http://sqlfiddle.com/#!2/eac021 – gatuso

ответ

0

Это должно быть то, что вам нужно, уведомление для «A», «B» и «C» экземпляры, я захватывая alias.Column AS FinalColumnName для запроса.

SELECT 
     p.id, 
     p.name, 
     p.code, 
     clA.code as claCode, 
     sclA.code as sclaCode, 
     clB.code as clbCode, 
     sclB.code as sclbCode, 
     clC.code as clcCode, 
     sclC.code as sclcCode 
    FROM 
     products p 
     INNER JOIN catleathers clA 
      ON p.catleather_id_a = clA.id 
     INNER JOIN subcatleathers sclA 
      ON p.subcatleather_id_a = sclA.id 
     INNER JOIN catleathers clB 
      ON p.catleather_id_b = clB.id 
     INNER JOIN subcatleathers sclB 
      ON p.subcatleather_id_b = sclB.id 
     INNER JOIN catleathers clC 
      ON p.catleather_id_c = clC.id 
     INNER JOIN subcatleathers sclC 
      ON p.subcatleather_id_c = sclC.id 

Однако, я также видел, что некоторые двигатели не любят «AS» положение, поэтому столбцы в вопросе, возможно, должны быть скорректированы с

 clA.code claCode, 
     sclA.code sclaCode, 
     clB.code clbCode, 
     sclB.code sclbCode, 
     clC.code clcCode, 
     sclC.code sclcCode 
0

Я взял на себя смелость добавить схемы таблиц к вашему вопросу, и я думаю, что я понимаю, что вы ищете. Я думаю, что этого должно быть достаточно отправной точки, чтобы вы могли заполнить оставшиеся таблицы.

SELECT 
    p.id 
    , p.name 
    , p.code 
    , 'claCode' = clA.code 
    , 'claName' = clA.name 
    , 'clbCode' = clB.code 
    , 'clbName' = clB.name 
FROM Products p 
    INNER JOIN catleathers clA 
    ON p.catleather_id_a = clA.id 
    INNER JOIN catleathers clB 
    ON p.catleather_id_b = clB.id 
0

, решенный с помощью DRapp

SELECT 
     p.id, 
     p.name, 
     p.code, 
     clA.code as claCode, 
     sclA.code as sclaCode, 
     clB.code as clbCode, 
     sclB.code as sclbCode, 
     clC.code as clcCode, 
     sclC.code as sclcCode, 

    catSoleA.code as catSoleACode, 
    subcatSoleA.code as subcatSoleACode, 

    catSoleB.code as catSoleBCode, 
    subcatSoleB.code as subcatSoleBCode, 

    catSoleC.code as catSoleCCode, 
    subcatSoleC.code as subcatSoleCCode 

    FROM 
     products p 
     INNER JOIN catleathers clA 
      ON p.catleather_id_a = clA.id 
     INNER JOIN subcatleathers sclA 
      ON p.subcatleather_id_a = sclA.id 
     INNER JOIN catleathers clB 
      ON p.catleather_id_b = clB.id 
     INNER JOIN subcatleathers sclB 
      ON p.subcatleather_id_b = sclB.id 
     INNER JOIN catleathers clC 
      ON p.catleather_id_c = clC.id 
     INNER JOIN subcatleathers sclC 
      ON p.subcatleather_id_c = sclC.id 

     INNER JOIN catsoles catSoleA 
      ON p.catsole_id_a = catSoleA.id 
     INNER JOIN subcatsoles subcatSoleA 
      ON p.subcatsole_id_a = subcatSoleA.id 

     INNER JOIN catsoles catSoleB 
      ON p.catsole_id_b = catSoleB.id 
     INNER JOIN subcatsoles subcatSoleB 
      ON p.subcatsole_id_b = subcatSoleB.id 

     INNER JOIN catsoles catSoleC 
      ON p.catsole_id_c = catSoleC.id 
     INNER JOIN subcatsoles subcatSoleC 
      ON p.subcatsole_id_c = subcatSoleC.id 

Он работает на SQL запрос, но не работает на PHP кодирования

->select(" 
       products.id as productid, 
       products.image as image, 
       products.code as code, 
       pproducts.name as name, 

       categories.name as cname, 
       subcategories.name as subcategory, 
       products.cost, 
       products.price, 


       clA.code as claCode, 
       sclA.code as sclaCode, 
       clB.code as clbCode, 
       sclB.code as sclbCode, 
       clC.code as clcCode, 
       sclC.code as sclcCode, 

       catSoleA.code as catSoleACode, 
       subcatSoleA.code as subcatSoleACode, 

       catSoleB.code as catSoleBCode, 
       subcatSoleB.code as subcatSoleBCode, 

       catSoleC.code as catSoleCCode, 
       subcatSoleC.code as subcatSoleCCode 




      products.details", FALSE) 

      ->from('products') 


      ->join('catleathers clA', 'products.catleather_id_a = clA.id', 'INNER') 
      ->join('subcatleathers sclA', 'products.subcatleather_id_a = sclA.id', 'INNER') 

      ->join('catleathers clB', 'products.catleather_id_a = clB.id', 'INNER') 
      ->join('subcatleathers sclB', 'products.subcatleather_id_a = sclB.id', 'INNER') 

      ->join('catleathers clC', 'products.catleather_id_a = clC.id', 'INNER') 
      ->join('subcatleathers sclC', 'products.subcatleather_id_a = sclC.id', 'INNER') 

      ->join('catsoles catSoleA', 'products.catsole_id_a = catSoleA.id', 'INNER') 
      ->join('subcatsoles subcatSoleA', 'products.subcatsole_id_a = subcatSoleA.id', 'INNER') 

      ->join('catsoles catSoleB', 'products.catsole_id_b = catSoleB.id', 'INNER') 
      ->join('subcatsoles subcatSoleB', 'products.subcatsole_id_b = subcatSoleB.id', 'INNER') 

      ->join('catsoles catSoleC', 'products.catsole_id_c = catSoleC.id', 'INNER') 
      ->join('subcatsoles subcatSoleC', 'products.subcatsole_id_c = subcatSoleC.id', 'INNER') 




      ->join('tbl_lining', 'products.lining=tbl_lining.id', 'left') 






      ->group_by("products.id"); 

Что я делаю неправильно?

Смежные вопросы