За последние 24 часа нас посетили 17739 программистов и 1650 роботов. Сейчас ищут 2113 программистов ...

Запрос вывода из двух таблиц в одну

Тема в разделе "MySQL", создана пользователем YamazakiHL, 15 июн 2013.

  1. YamazakiHL

    YamazakiHL Новичок

    С нами с:
    14 июн 2013
    Сообщения:
    5
    Симпатии:
    0
    Доброго времени суток, есть вопрос по запросу с объединением таблиц с разными полями.
    Код (Text):
    1. CREATE TABLE IF NOT EXISTS `table1` (
    2.   `id` int(11) NOT NULL AUTO_INCREMENT,
    3.   `name` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
    4.   `image` varchar(255) COLLATE utf8_unicode_ci NOT NULL DEFAULT '/upload/no_image.gif',
    5.   `link` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
    6.   `description` text COLLATE utf8_unicode_ci,
    7.   `active` tinyint(1) NOT NULL DEFAULT '1',
    8.   PRIMARY KEY (`id`)
    9. ) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=10 ;
    10.  
    11. и
    12.  
    13. CREATE TABLE IF NOT EXISTS `table2` (
    14.   `id` int(11) NOT NULL AUTO_INCREMENT,
    15.   `category` int(11) NOT NULL,
    16.   `name` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
    17.   `thumbnail` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
    18.   `image` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
    19.   `description` text COLLATE utf8_unicode_ci,
    20.   `active` tinyint(1) NOT NULL DEFAULT '1',
    21.   PRIMARY KEY (`id`)
    22. ) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=3 ;
    Во второй таблице есть поле `category` оно равняется `id` первой таблицы (связь). Но во второй таблице они могут повторяться. (Т.е. одна категория может иметь много подкатегорий).

    Что мне требуется, вывести таблицу `table1`, без поля `link`, но с дополнительным полем `image` AS `link` из таблицы `table2`, которое имеет случайное значение из массива всех строк, где `table2`.`category` равно `table1`.`id`. А если в `table2` нет подкатегории для данной категории то оставлять поле `link` пустым.

    Я рыскал по просторам интернета и смог собрать из всего найденного только данный запрос:
    Код (Text):
    1. SELECT DISTINCT `c`.`name`,`c`.`image`,`c`.`description`,
    2.   CASE WHEN COUNT(`i`.`image`)>=1 THEN `i`.`image` ELSE '' END AS `link`
    3. FROM `table1` AS `c` LEFT JOIN `table2` AS `i` ON `c`.`id`=`i`.`category`
    4. WHERE `c`.`active`='1' AND `i`.`active`='1'
    Но он работает несколько не корректно, он выводит только одну запись (первое вхождение) либо с присутствующим значением, либо с отсутствующим значением (в зависимости от условия объединения LEFT JOIN: = или !=), но не все вместе.

    Прошу помощи у специалистов данного форума.
     
  2. YamazakiHL

    YamazakiHL Новичок

    С нами с:
    14 июн 2013
    Сообщения:
    5
    Симпатии:
    0
    Неужели никто не хочет поломать свои серые вещества ради общего дела, скажем так.