SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 05.12.2010 16:45:13

MySQL-progress
Участник
Зарегистрирован: 22.11.2010
Сообщений: 11

Select. Объединение различных струткр таблиц и заполнение данными

Добрый день.

Есть (к примеру) три таблицы (text, aplication, image).
Каждая из них имеет разную структуру, а также два схожим столбца - это `id` и `title`.

id     title     mime     size     countd_download         (таблица aplication)
id     title     mime     width     height                        (таблица image)
id     title     date     text     avtor                         (таблица text)

Как сделать запрос к этим трем таблицам, что выбрать все общие и уникальные столбцы и заполнить их данными.
Если в строке существует значение Width - то поле заполняется, если нет пишет NULL.

Составил такой запрос:

SELECT * FROM `text`
LEFT JOIN `image` USING ( id, title )
LEFT JOIN `aplication` USING ( id, title )
LIMIT 0 , 30


Здесь в результате запроса присутствуют все поля.
id     title     mime     size     countd_download  width height   date     text     avtor

НО здесь получается выбрать записи только из таблицы `text`!
Как выбрать все записи из всех трех таблиц с данной объедененной структурой полей (и `text` и `image` и `aplication`)?

---
Спасибо.
Во вложенном файле
экспортированный дамп базы со структурой.

Отредактированно MySQL-progress (05.12.2010 16:46:51)


Разработка сайтов на CMS TYPO3.
Контактный e-mail: i-litovan@yandex.ru

Неактивен

 

#2 05.12.2010 17:24:06

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Select. Объединение различных струткр таблиц и заполнение данными

Скорее всего, в других таблицах нет данных с соответствующими id и title.
Ну и вложенного файла нет )

Неактивен

 

#3 05.12.2010 17:41:28

MySQL-progress
Участник
Зарегистрирован: 22.11.2010
Сообщений: 11

Re: Select. Объединение различных струткр таблиц и заполнение данными

Вот, это sql-содержимое (которое тестирую).

-- phpMyAdmin SQL Dump
-- version 3.3.8
-- http://www.phpmyadmin.net
--
-- Хост: localhost
-- Время создания: Дек 05 2010 г., 16:35
-- Версия сервера: 5.1.40
-- Версия PHP: 5.3.3

SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";


/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;

--
-- База данных: `test`
--

-- --------------------------------------------------------

--
-- Структура таблицы `aplication`
--

CREATE TABLE IF NOT EXISTS `aplication` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `title` char(64) NOT NULL,
  `mime` char(32) NOT NULL,
  `size` int(11) NOT NULL,
  `countd_download` int(11) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=cp1251 AUTO_INCREMENT=3 ;

--
-- Дамп данных таблицы `aplication`
--

INSERT INTO `aplication` (`id`, `title`, `mime`, `size`, `countd_download`) VALUES
(1, 'Презентация', 'xls', 303021, 4),
(2, 'Буклет - реклама', 'ppt', 49593, 92);

-- --------------------------------------------------------

--
-- Структура таблицы `image`
--

CREATE TABLE IF NOT EXISTS `image` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `title` char(64) NOT NULL,
  `mime` char(32) NOT NULL,
  `width` int(11) NOT NULL,
  `height` int(11) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=cp1251 AUTO_INCREMENT=3 ;

--
-- Дамп данных таблицы `image`
--

INSERT INTO `image` (`id`, `title`, `mime`, `width`, `height`) VALUES
(1, 'На берегу волги', 'jpg', 100, 40),
(2, 'Гавань - порт', 'gif', 200, 200);

-- --------------------------------------------------------

--
-- Структура таблицы `text`
--

CREATE TABLE IF NOT EXISTS `text` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `title` char(64) NOT NULL,
  `date` date NOT NULL,
  `text` text NOT NULL,
  `avtor` int(11) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=cp1251 AUTO_INCREMENT=3 ;

--
-- Дамп данных таблицы `text`
--

INSERT INTO `text` (`id`, `title`, `date`, `text`, `avtor`) VALUES
(1, 'Заметки о хождениях', '2010-12-17', 'Познакомьтесь с возможностями', 0),
(2, 'Справка Моя', '2002-12-13', 'Получить эту информацию', 5);

Отредактированно MySQL-progress (05.12.2010 17:43:58)


Разработка сайтов на CMS TYPO3.
Контактный e-mail: i-litovan@yandex.ru

Неактивен

 

#4 05.12.2010 17:44:53

MySQL-progress
Участник
Зарегистрирован: 22.11.2010
Сообщений: 11

Re: Select. Объединение различных струткр таблиц и заполнение данными

paulus написал:

Скорее всего, в других таблицах нет данных с соответствующими id и title.
Ну и вложенного файла нет )

Каждая из таблиц заполненна данными.
Надо, что бы все это выводилось друг за другом.

Отредактированно MySQL-progress (05.12.2010 17:46:39)


Разработка сайтов на CMS TYPO3.
Контактный e-mail: i-litovan@yandex.ru

Неактивен

 

#5 05.12.2010 23:33:35

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Select. Объединение различных струткр таблиц и заполнение данными

В приведенном вами дампе видно, что "в других таблицах нет данных с соответствующими id и title."
Поэтому запрос и выводит только данные из таблицы `text`.

Видимо вам нужно, что-то иное, но что не понятно. Напишите какой результат запроса вы хотите получить для этих данных.

Неактивен

 

#6 06.12.2010 01:01:01

MySQL-progress
Участник
Зарегистрирован: 22.11.2010
Сообщений: 11

Re: Select. Объединение различных струткр таблиц и заполнение данными

Решил нарисовать суть проблемы картинкой.
Она во вложенном файле.


Прикрепленные файлы:
Attachment Icon 001.png, Размер: 85,232 байт, Скачано: 380

Разработка сайтов на CMS TYPO3.
Контактный e-mail: i-litovan@yandex.ru

Неактивен

 

#7 06.12.2010 01:23:57

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Select. Объединение различных струткр таблиц и заполнение данными

SELECT id, title, поля первой таблицы, NULL, NULL, ... (в количестве полей второй таблицы и третьей таблицы) FROM table1
UNION
SELECT id, title, NULL, ..., NULL, поля второй таблицы, NULL, ...
UNION
...

Смысла в этом никакого. Лучше сделайте три отдельных запроса.

Неактивен

 

#8 06.12.2010 01:28:26

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Select. Объединение различных струткр таблиц и заполнение данными

Одним запросом никак.

Если вам нужна новая таблица, то сначала создаете её с помощью create table, затем заполняете
insert into `новая таблица` select * from `image`;
insert into `новая таблица` select * from `text`; и т.д.

Если нужна просто выборка, то делаете запрос вида:

select id, title,  mime,  `size`, `countd_download`, null `width`, null `height`, null `date`, null `text`, null`avtor` from aplication
union
select id, title,  null mime,  null `size`, null `countd_download`, `width`, `height`, null `date`, null `text`, null `avtor` from image
union
select
id, title,  null mime,  null `size`, null `countd_download`, null `width`, null `height`, `date`, `text`, `avtor` from `text`;


Запрос можно с помощью подготовленных выражений, см http://sqlinfo.ru/forum/viewtopic.php?id=363

Неактивен

 

#9 06.12.2010 01:59:33

MySQL-progress
Участник
Зарегистрирован: 22.11.2010
Сообщений: 11

Re: Select. Объединение различных струткр таблиц и заполнение данными

Спасибо.
Тестирую.


Разработка сайтов на CMS TYPO3.
Контактный e-mail: i-litovan@yandex.ru

Неактивен

 

#10 06.12.2010 03:29:26

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Select. Объединение различных струткр таблиц и заполнение данными

Уверен, что самым правильным ответом является

paulus написал:

Смысла в этом никакого. Лучше сделайте три отдельных запроса.

Зачем вам нужна такая схема?

Неактивен

 

#11 06.12.2010 14:07:50

MySQL-progress
Участник
Зарегистрирован: 22.11.2010
Сообщений: 11

Re: Select. Объединение различных струткр таблиц и заполнение данными

Есть несколько типов данных:
image, text, audio, aplication, video.
На каждый из типов данных ведется таблица.
И для нужной папки выбиаются нужные файлы, где под каждый файл деляется SELECT для получения информации о файле в папке.


Разработка сайтов на CMS TYPO3.
Контактный e-mail: i-litovan@yandex.ru

Неактивен

 

#12 06.12.2010 14:11:40

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Select. Объединение различных струткр таблиц и заполнение данными

Не понял о каких "папках" и "файлах" говорится в последнем предложении.
И по прежнему актуален вопрос - почему не сделать несколько разных запросов?

Неактивен

 

#13 06.12.2010 14:16:31

MySQL-progress
Участник
Зарегистрирован: 22.11.2010
Сообщений: 11

Re: Select. Объединение различных струткр таблиц и заполнение данными

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

После все эти данные выводятся в конкретную папку.
Необходимо производить сортиовку для всех файлов в папке.
Делать ограничение на вывод.

Если сделать несколько запросов, то работа с LIMIT, ORDER будет вестись к конкретной таблице.
Но не к сумарной. И я не смогу управлять выводом содержимого папки.


Разработка сайтов на CMS TYPO3.
Контактный e-mail: i-litovan@yandex.ru

Неактивен

 

#14 06.12.2010 16:35:34

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Select. Объединение различных струткр таблиц и заполнение данными

Сделайте просто CONCAT всего мусора о файле в одну строку, и выводите ее?

Неактивен

 

#15 06.12.2010 17:21:30

MySQL-progress
Участник
Зарегистрирован: 22.11.2010
Сообщений: 11

Re: Select. Объединение различных струткр таблиц и заполнение данными

Как это сделать?
Что-то вроде SELECT `id`, `title`, CONCAT(`mime`, ':', `size` ) FROM `aplication`?
И тогда уже не смогу отсортировать обобщенный результат по полям, задейстованным в CONCAT.

Или как?

Отредактированно MySQL-progress (06.12.2010 17:24:52)


Разработка сайтов на CMS TYPO3.
Контактный e-mail: i-litovan@yandex.ru

Неактивен

 

#16 06.12.2010 17:26:38

MySQL-progress
Участник
Зарегистрирован: 22.11.2010
Сообщений: 11

Re: Select. Объединение различных струткр таблиц и заполнение данными

SELECT `id`, `title`, CONCAT(`mime`, ':', `size` ) FROM `aplication`
UNION
SELECT `id`, `title`, CONCAT(`width`, ':', `mime` ) FROM `image`
UNION
SELECT `id`, `title`, CONCAT(`avtor`, ':', `text` ) FROM `text`


Разработка сайтов на CMS TYPO3.
Контактный e-mail: i-litovan@yandex.ru

Неактивен

 

#17 06.12.2010 18:37:55

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Select. Объединение различных струткр таблиц и заполнение данными

Да, как-то так. Отсортировать Вы в любом случае не сможете, т.к. UNION. Его
можно сортировать только целиком.

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson