[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Вывод данных из бд
l@pteff
всем добрый вечер
есть таблицы 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, а тут почему-то ошибка wink.gif

Спустя 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>';
}

теперь выводится декартово произведение таблиц. как исправить? заранее спасибо
Быстрый ответ:

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