есть таблицы users с полями: id_user, login
goods с полями: id_good, type_good, price_good
orders с полями: id_order, id_good, id_user, order_sum
Нужно в личном кабинете пользователя в разделе "Мои заказы" вывести: названия товаров и цену заказа.
И такой запрос не работает:
$username=$_SESSION['login_auth']; <!--логин пользователя при авторизации-->
$rSelect = mysql_query("SELECT id_order, type_good, order_sum, login, id_user FROM goods, users LEFT JOIN orders ON goods.id_good=orders.id_good WHERE users.id_user='$username'");
while ($row=mysql_fetch_assoc($rSelect)) {
echo '<table><tr><td>'.$row['type_good'].'</td><td>'.$row['order_sum'].'</td></tr></table>';
}
почему? если делать без таблицы users, подставляя id вручную:
$rSelect = mysql_query("SELECT id_order, type_good, order_sum FROM goods LEFT JOIN orders ON goods.id_good=orders.id_good WHERE orders.id_user='1'");
то выбирает правильно
Спустя 3 часа, 45 минут, 9 секунд (31.05.2011 - 01:40) KonstantinK написал(а):
Как мне видиться таблица users не связана с остальными таблицами поэтому и не идет запрос. Обычно действует правило что условиq связывающих таблицы на одно меньше самих таблиц . У вас 3 таблицы значит должно быть 2 условия, так то в первом запросе и есть но как понять вот это
users LEFT JOIN orders ON goods.id_good=orders.id_goodвы связываете таблицы users и orders а условия после ON ставите для таблиц goods и orders. Немного запутанно объяснил но может поймете , а во втором запросе все верно две таблицы goods и orders связаны через поле id_good , поэтому там все нормально выбирает.
Спустя 19 часов, 34 минуты, 1 секунда (31.05.2011 - 21:14) l@pteff написал(а):
Связываю таблицы users и orders:
выдаётся ошибка:
ALTER TABLE `orders` ADD FOREIGN KEY (id_user) REFERENCES users (id_user)
ON UPDATE CASCADE
ON DELETE RESTRICT
выдаётся ошибка:
Цитата |
#1452 - Cannot add or update a child row: a foreign key constraint fails (`db_name`.`#sql-5d0_db`, CONSTRAINT `#sql-5d0_db_ibfk_2` FOREIGN KEY (`id_user`) REFERENCES `users` (`id_user`) ON UPDATE CASCADE) |
в подчиненной таблице нет ключевых записей, которых бы не было в парентной таблице, почему не создаётся индекс?
Спустя 18 минут, 40 секунд (31.05.2011 - 21:32) l@pteff написал(а):
до этого таким же способом успешно связал orders.id_good и goods.id_good, а тут почему-то ошибка
Спустя 23 часа, 22 минуты, 12 секунд (1.06.2011 - 20:54) l@pteff написал(а):
связал таблицы users и orders по полю id_user:
Затем делаю такой запрос:
но ничего не выводится. как здесь правильно сделать выборку?
ALTER TABLE `orders` ADD FOREIGN KEY (id_user) REFERENCES users (id_user)
ON UPDATE CASCADE
ON DELETE RESTRICT
Затем делаю такой запрос:
$rSelect = mysql_query("SELECT id_order, type_good, order_sum, login, id_user FROM goods, orders, users where orders.id_user=users.id_user and users.login='$username'");
но ничего не выводится. как здесь правильно сделать выборку?
Спустя 36 минут, 35 секунд (1.06.2011 - 21:31) l@pteff написал(а):
подправил запрос:
теперь выводится декартово произведение таблиц. как исправить? заранее спасибо
$rSelect = mysql_query("SELECT `orders`.`id_order`, `goods`.`type_good`, `orders`.`order_sum`, `users`.`login`, `users`.`id_user` FROM `goods`, `orders`, `users` where `orders`.`id_user`=`users`.`id_user` and `users`.`login`='$username'");
while ($row=mysql_fetch_assoc($rSelect)) {
echo '<table><tr><td>'.$row['type_good'].'</td><td>'.$row['order_sum'].'</td></tr></table>';
}
теперь выводится декартово произведение таблиц. как исправить? заранее спасибо