[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Выборка из 3х и более таблиц
Игорь_Vasinsky
Вообщем есть 3 таблицы с данными - у каждой есть столбец `prid` - по нему соб-но и выборка.

Главная `product` - из остальных 2х нужно всё запихать по `prid`

(SELECT * FROM `product` LEFT JOIN `product_namefeat_value` USING(prid)) 
UNION
(SELECT * FROM `product` LEFT JOIN `images` USING(prid))


с ON `product`.`prid` = `...`.`prid` - тоже не проканывает.



Спустя 1 час, 35 минут, 22 секунды (7.08.2012 - 09:26) johniek_comp написал(а):
хз мож так попробуй
SELECT p.*,t2.*,t3.* FROM product AS p,t2,t3
LEFT JOIN t2 ON t2.prid = p.prid
LEFT JOIN t3 ON t3.prid = p.prid

Спустя 2 минуты, 45 секунд (7.08.2012 - 09:29) Игорь_Vasinsky написал(а):
а разница? что с альясами, что без них, толи во втором JOIN WHERE юзать...

Спустя 1 минута, 54 секунды (7.08.2012 - 09:31) johniek_comp написал(а):
Игорь_Vasinsky
опиши подробно, напишу запрос, я наверно не понял чуток

Спустя 7 минут, 6 секунд (7.08.2012 - 09:38) Игорь_Vasinsky написал(а):
смотри

есть 3 таблицы - в каждой есть столбец `prid`

t1 - из этой таблицы берутся данные и дополняются из таблиц t2 и t3 - связь - столбец `prid`

специально prid делал везде, думал чтоб обойтись без ON - чисто с USING

Спустя 11 минут, 54 секунды (7.08.2012 - 09:50) Placido написал(а):
Не понял, а чем обычный JOIN не подходит?
SELECT `p`.*, `pn`.*, `i`.* FROM `product` `p` 
LEFT JOIN `product_namefeat_value` `pn` ON `p`.`prid` = `pn`.`prid`
LEFT JOIN `images` `i` ON `p`.`prid` = `i`.`prid`;

Спустя 5 минут, 5 секунд (7.08.2012 - 09:55) Игорь_Vasinsky написал(а):
Я не видел раньше такого синтаксиса
Цитата
`product_namefeat_value` `pn`

2 таблицы подряд без всяких операторов. таблицы-алияс

щас проверю.

Спустя 56 минут, 44 секунды (7.08.2012 - 10:51) Игорь_Vasinsky написал(а):
выборки нет из 3й таблицы.
гоню. это я криворукий. спс.+

Спустя 2 дня, 1 час, 28 минут, 13 секунд (9.08.2012 - 12:20) Игорь_Vasinsky написал(а):
Обнаружил баг

если какая нить таблица не содержит значений в поле `prid` - пре выборке `prid` == null

в моём случае именно таблица `images` - не содержит вообще записей

в итоге

Array
(
[prid] =>
[name] => Купон на билет
[namefeat] => Номер
[feat] => number
[featval] => eb80753e24ff80e69928
[image] =>
)


из за чего так?

Спустя 52 минуты, 46 секунд (9.08.2012 - 13:12) inpost написал(а):
если я правильно понял, ты не выбирай через * всё, не делай * ко всем таблицам. Можешь так сделать:
main.*, second.`image`,third.`feat` , в таком роде.

Спустя 5 минут, 12 секунд (9.08.2012 - 13:18) Игорь_Vasinsky написал(а):
мне нужны все столбцы во всех таблицах попробывал явно указать имента столбцов - без результата

Спустя 19 минут, 14 секунд (9.08.2012 - 13:37) Invis1ble написал(а):
выложи тестовый дамп и еще раз сформулируй задачу, потому что я например так и не понял толком, что ты хочешь сделать

Спустя 7 минут, 46 секунд (9.08.2012 - 13:45) Игорь_Vasinsky написал(а):
есть 3 таблицы

`product`
`product_namefeat_value`
`images`

cвязь у этих таблиц по столбцу `prid` (product id)

мне нужно сделать выборку по `prid`



CREATE TABLE IF NOT EXISTS `images` (
`prid` int(11) DEFAULT NULL,
`image` varchar(100) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;


CREATE TABLE IF NOT EXISTS `product` (
`prid` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(80) NOT NULL,
PRIMARY KEY (`prid`)
)
ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=142 ;

INSERT INTO `product` (`prid`, `name`) VALUES
(141, 'Товар');


CREATE TABLE IF NOT EXISTS `product_namefeat_value` (
`prid` int(11) DEFAULT NULL,
`namefeat` varchar(300) DEFAULT NULL,
`feat` varchar(300) DEFAULT NULL,
`featval` varchar(300) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;



INSERT INTO `product_namefeat_value` (`prid`, `namefeat`, `feat`, `featval`) VALUES
(141, 'Номер', 'number', 'eb80753e24ff80e69928'),
(
141, 'Наименование', 'name', 'Купон на билет'),
(
141, 'Псевдоним', 'pseudonim', 'kupon_na_bilet'),
(
141, 'Количество', 'count', '1'),
(
141, 'Категория', 'catid', '21'),
(
141, 'Описание', 'description', 'фыв');

Спустя 17 минут, 8 секунд (9.08.2012 - 14:02) Invis1ble написал(а):
select p.*, i.image, pnv.namefeat, pnv.feat, pnv.featval
from product p
left join images i on i.prid = p.prid
left join product_namefeat_value pnv on pnv.prid = p.prid

если одна из таблиц пуста - конечно ты получишь null в качестве значений соответствующих полей

Спустя 2 минуты, 32 секунды (9.08.2012 - 14:04) Игорь_Vasinsky написал(а):
гениально.
просто не указывать в SELECT ту ячеку, которая может оказаться null - правильно понял?

Спустя 12 минут, 44 секунды (9.08.2012 - 14:17) Invis1ble написал(а):
Цитата
просто не указывать в SELECT ту ячеку, которая может оказаться null - правильно понял?

в принципе да, но я не это хотел донести
а почему ты вообще так боишься null ? )

Спустя 5 минут, 57 секунд (9.08.2012 - 14:23) Игорь_Vasinsky написал(а):
ну получается что при выборке prid=null, а я его использую для указания индекса элемента массива.

Спустя 11 минут, 22 секунды (9.08.2012 - 14:34) Invis1ble написал(а):
ну в итоге решена проблема, получается?

Спустя 41 секунда (9.08.2012 - 14:35) Игорь_Vasinsky написал(а):
да, спс. плюсанул)

Спустя 16 секунд (9.08.2012 - 14:35) inpost написал(а):
Игорь_Vasinsky
SELECT t1.*,t2.*,t3.*,t1.`prid` AS `special_prid`

Спустя 2 минуты, 3 секунды (9.08.2012 - 14:37) Игорь_Vasinsky написал(а):
и что это даст? rolleyes.gif там будет сидеть значение из одной из таблиц которое не null?

Спустя 1 минута, 43 секунды (9.08.2012 - 14:39) inpost написал(а):
Игорь_Vasinsky
а то, что из первой таблицы у тебя будет в special_prid - нужный тебе prid, с ним и работай, а на prid обычный забить можешь.

Спустя 4 минуты, 22 секунды (9.08.2012 - 14:43) Игорь_Vasinsky написал(а):
а... у меня просто уже 20 мин пере глазами всё плывёт)

показалось что так

Цитата
SELECT t1.*,t2.*,t3.*  AS `special_prid`


не заметил t1.`prid` biggrin.gif


_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.