Никак не могу разобратся с джойнами, прошу помощи на примере. :roll: Есть таблица product: поля id и name, таблица cart: поля id, productID и userID Запросом нужно получить все записи таблицы product, значение id которых присутствует в колонке productID хотя бы один раз.
А тут не нужен join [sql]SELECT * FROM `product`.`name` FROM `product`,`cart` WHERE `cart`.`productID`=`product`.`id`;[/sql]
Вообще не понял запроса. Сначала извлекаются все поля из `product`.`name`, что вроде как поле таблицы, потом снова FROM... в любом случае он не работает. Уточню: в таблице cart может быть сколько угодно записей, где productID равен полю id таблицы product, а может не быть ни одной. 2 EugeneTM: спасибо, читал, не помогает) Может изза того что на инглише, может перегрелся уже сегодня, а сделать все равно надо.
Быстро вы мнение меняете. Для первого. Вариантов несколько: мой запрос, запрос через INNER JOIN (он равноценен моему), запрос через LEFT JOIN (главная таблица cart). Для второго варианта годиться LEFT JOIN с управляющей таблицей product. Что касаемо моего варианта, так он возвращает имена тех продуктов, которые содержаться в тележке. Только * FROM нужно вычеркнуть, ибо по случайности не удалил.
Это как раз я понял, только как это на MySQL записать? Пишу: [sql] SELECT * FROM cart LEFT JOIN product ON cart.productID=product.id [/sql] но тогда $row['id'] в результирующем наборе почемуто пустое
Вы меня запутали. То одно выбрать, то другое. Напишите структуру базы и что нужно получить на выводе.
Таблица product: id ----- name ========= 1 ----- apple 2 ----- tomat ...... и т.д. Таблица cart: id ------ productID ============ 1 ------- 2 2 ------- 2 3 ------- 6 4 ------- 1 ...... и т.д. нужно получить product.id, product.name, но только те, id которых присутствуют в одной из строк cart.productID
[sql] mysql> SELECT `cart`.`id`, `product`.`name` FROM `cart` LEFT JOIN `product` ON (`cart`.`productID` = `product`.`id`) WHERE `name` IS NOT NULL; +----+-------+ | id | name | +----+-------+ | 1 | tomat | | 2 | tomat | | 4 | apple | +----+-------+ 3 rows in set (0.00 sec) [/sql] [sql] mysql> SELECT `cart`.`id`, `product`.`name` FROM `product`, `cart` WHERE `product`.`id`=`cart`.`productID`; +----+-------+ | id | name | +----+-------+ | 1 | tomat | | 2 | tomat | | 4 | apple | +----+-------+ 3 rows in set (0.00 sec) [/sql] Как я и сказал с самого начала, тут можно обойтись без JOIN.
INNER JOIN возвращает строку из первой таблиц, только если нашёл запись во второй. LEFT JOIN из первой таблицы возвращает запись всегда, даже когда во второй не нашёл ей пару. Используя IS NOT NULL ты посути эмулируешь INNER JOIN при помощи LEFT JOIN
Я и не спорю - просто он настойчиво требовал, чтобы у него обязательно был JOIN и начал приводить примеры с JOIN LEFT.