"Доборка" данных из той же таблицы

TheGP

Новичок
Есть две таблицы

products: crosses
___________ ___________________
| id | name | | product_id | cross_id |

В первой таблице продукты, во второй - связи продуктов с другими продуктами. То есть продукт 1 имеет связь с продуктом 2 и т.п.)

Мне нужно выбрать сначала несколько продуктов по совпадению по имени, а потом вывести связанные продукты, с этими продуктами(которые были найдены по имени). Можно организовать все это в одном запросе?

У меня вышел такой запрос, но он почему то не работает
PHP:
SELECT * FROM `products` AS `p` WHERE name='продукт 1' OR `p`.id IN (SELECT `c`.cross_id FROM `crosses` AS `c` WHERE `c`.product_id=`p`.id)
Вот дампы таблиц:
PHP:
DROP TABLE IF EXISTS `crosses`;
CREATE TABLE `crosses` (
  `product_id` int(11) NOT NULL,
  `cross_id` int(11) NOT NULL,
  KEY `product_id` (`product_id`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251;

INSERT INTO `crosses` (`product_id`, `cross_id`) VALUES
(1, 2);

DROP TABLE IF EXISTS `products`;
CREATE TABLE `products` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(32) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=cp1251 AUTO_INCREMENT=3 ;

INSERT INTO `products` (`id`, `name`) VALUES
(1, 'продукт 1'),
(2, 'продукт 2');
Не подскажите что может быть в моем запросе не верно, или может вообще не так это делает?
 

TheGP

Новичок
Получился вот такой запрос

PHP:
SELECT 
    *
FROM 
    `products` AS `p` 
LEFT JOIN 
    `crosses` AS `c` ON `p`.id = `c`.product_id 
LEFT JOIN 
    `products` AS `p2` ON `c`.cross_id = `p2`.id 
WHERE 
    `p`.name='продукт 1'
Но результат его прикольно выглядит:


Его в столбец никак нельзя переформатировать?
 

Вурдалак

Продвинутый новичок
Код:
SELECT 
`p`.`id` AS `p_id`, `p`.`name` AS `p_name`, ...
Что такое «в столбец переформатировать» я не понял.
 

TheGP

Новичок
Всмысле чтобы продукты шли в отдельных строчках а не склеиные?
продукт1
продукт2
продукт3
 

TheGP

Новичок
О, придумал
PHP:
SELECT DISTINCT
    `p2`.*
FROM 
    `products` AS `p` 
LEFT JOIN 
    `crosses` AS `c` ON `p`.id = `c`.product_id 
LEFT JOIN 
    `products` AS `p2` ON `c`.cross_id = `p2`.id OR `p`.id=`p2`.id
WHERE 
    `p`.name='продукт 1'
Спасибо, Вурдалак, проблема решена:)
 
Сверху