Всем привет, у меня есть БД в которой 3 таблицы, users(id, name, login, password, email), products(id, brand, price, description) и users_products(u_id, p_id), есть страница для регистрации и входа, есть страница для добавление и вывода всех товаров, надо сделать еще одну страницу, для просмотра списка товаров определенного пользователя, это тестовое задание, и мне не много не ясно что значит- для просмотра списка товаров определенного пользователя, но я это понял что для просмотра товаров того юзера под чьим логином я зашел, а может и не так, если у вас есть свои варианты, с удовольствием выслушаю, и буду благодарен за помощь, так ка на той странице я написал такой вот запрос: Код (Text): $sql = " SELECT * FROM products LEFT JOIN users_products ON products.id = users_products.p_id WHERE users_products.u_id = 1 "; $goods = mysql_query($sql) or die(mysql_error()); mysql_close(); но выполнив этот запрос в mysql, мне написало 'empty set'.
Та не, в БД 3 таблице, users - там 2 записи, products - тоже две вроде. Просто я не понимаю что люди которые отправили это задание мне, имеют в виду под: 3.Страница вывода всех товаров 4. Страница вывода товаров определенного пользователя.
Можно погадать: 3. все товары которые есть в базе данных 4. товары которые добавил сам пользователь, либо которые он купил
Wahtel, запрос вполне может вернуть пустой набор строк. why not? не очень понятно что ты имеешь в виду, когда пишешь ты запускал запрос в консольной программе mysql? попробуй убрать условие WHERE и опять проверь. появились строки? было бы круто, если бы ты создал нам площадку для экспериментов на http://sqlfiddle.com/
Я пробовал через командную строку в mysql этот запрос, и он пишет empty set, если убрать WHERE... то оно выводит таблицу products с двумя дополнительными столбцами u_id-NULL, p_id-NULL. Пытаюсь создать площадку, выдает ошибку, хотя у меня на компе все ок. Код (Text): CREATE TABLE products ( id int(11) NOT NULL auto_increment, brand varchar(50) NOT NULL default '', description varchar(50) NOT NULL default '', price int(11) NOT NULL default 0, PRIMARY KEY (id) ) CREATE TABLE users ( id int(11) NOT NULL auto_increment, name varchar(50) NOT NULL default '', login varchar(50) NOT NULL default '', password varchar(50) NOT NULL default '', email varchar(50) NOT NULL default '', PRIMARY KEY (id) ) CREATE TABLE users_products ( u_id int , p_id int, primary key (u_id, p_id) )
Надо ставить ";" после каждого CREATE TABLE () Ниже в этом же поле вставь INSERT INTO … чтобы заполнить тестовыми данными эти таблицы, после каждого оператора также нужны ";" Короче говоря, в sqlfiddle в левом поле должно быть что-то вроде дампа твоей базы — структура плюс данные. А в правом поле потом можно тестировать какие-то запросы с этой базой. Теперь смотри на эти строчки с NULL и пойми почему условие users_products.u_id = 1 приводит к пустому набору. Там тупо нет строк, подходящих под это условие — таковы твои исходные данные!!!