За последние 24 часа нас посетили 16854 программиста и 1641 робот. Сейчас ищет 941 программист ...

Соединение таблиц

Тема в разделе "Прочие вопросы по PHP", создана пользователем Wahtel, 16 дек 2014.

  1. Wahtel

    Wahtel Новичок

    С нами с:
    24 ноя 2014
    Сообщения:
    6
    Симпатии:
    0
    Всем привет, у меня есть БД в которой 3 таблицы, users(id, name, login, password, email), products(id, brand, price, description) и users_products(u_id, p_id), есть страница для регистрации и входа, есть страница для добавление и вывода всех товаров, надо сделать еще одну страницу, для просмотра списка товаров определенного пользователя, это тестовое задание, и мне не много не ясно что значит- для просмотра списка товаров определенного пользователя, но я это понял что для просмотра товаров того юзера под чьим логином я зашел, а может и не так, если у вас есть свои варианты, с удовольствием выслушаю, и буду благодарен за помощь, так ка на той странице я написал такой вот запрос:

    Код (Text):
    1. $sql = "
    2.     SELECT * FROM products LEFT JOIN users_products ON products.id = users_products.p_id
    3.     WHERE users_products.u_id = 1
    4. ";
    5. $goods = mysql_query($sql) or die(mysql_error());
    6.  
    7. mysql_close();
    но выполнив этот запрос в mysql, мне написало 'empty set'.
     
  2. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Может база данных пустая?
     
  3. Wahtel

    Wahtel Новичок

    С нами с:
    24 ноя 2014
    Сообщения:
    6
    Симпатии:
    0
    Та не, в БД 3 таблице, users - там 2 записи, products - тоже две вроде.
    Просто я не понимаю что люди которые отправили это задание мне, имеют в виду под:
    3.Страница вывода всех товаров
    4. Страница вывода товаров определенного пользователя.
     
  4. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Можно погадать:
    3. все товары которые есть в базе данных
    4. товары которые добавил сам пользователь, либо которые он купил
     
  5. Wahtel

    Wahtel Новичок

    С нами с:
    24 ноя 2014
    Сообщения:
    6
    Симпатии:
    0
    Ну, я это так в принципе и понял, но вот что с реализацией не очень.
     
  6. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.131
    Симпатии:
    1.250
    Адрес:
    там-сям
    Wahtel, запрос вполне может вернуть пустой набор строк. why not?
    не очень понятно что ты имеешь в виду, когда пишешь
    ты запускал запрос в консольной программе mysql?

    попробуй убрать условие WHERE и опять проверь. появились строки?

    было бы круто, если бы ты создал нам площадку для экспериментов на http://sqlfiddle.com/
     
  7. Wahtel

    Wahtel Новичок

    С нами с:
    24 ноя 2014
    Сообщения:
    6
    Симпатии:
    0
    Я пробовал через командную строку в mysql этот запрос, и он пишет empty set, если убрать WHERE...
    то оно выводит таблицу products с двумя дополнительными столбцами u_id-NULL, p_id-NULL.
    Пытаюсь создать площадку, выдает ошибку, хотя у меня на компе все ок.
    Код (Text):
    1.  
    2. CREATE TABLE products (
    3.     id int(11) NOT NULL auto_increment,
    4.     brand varchar(50) NOT NULL default '',
    5.     description varchar(50) NOT NULL default '',
    6.     price int(11) NOT NULL default 0,
    7.     PRIMARY KEY (id)
    8. )
    9.  
    10. CREATE TABLE users (
    11.     id int(11) NOT NULL auto_increment,
    12.     name varchar(50) NOT NULL default '',
    13.     login varchar(50) NOT NULL default '',
    14.     password varchar(50) NOT NULL default '',
    15.     email varchar(50) NOT NULL default '',
    16.     PRIMARY KEY (id)
    17. )
    18.  
    19. CREATE TABLE users_products
    20. (
    21.   u_id int ,
    22.   p_id int,
    23.   primary key (u_id, p_id)
    24. )
     
  8. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.131
    Симпатии:
    1.250
    Адрес:
    там-сям
    Надо ставить ";" после каждого CREATE TABLE ()
    Ниже в этом же поле вставь INSERT INTO … чтобы заполнить тестовыми данными эти таблицы, после каждого оператора также нужны ";"

    Короче говоря, в sqlfiddle в левом поле должно быть что-то вроде дампа твоей базы — структура плюс данные. А в правом поле потом можно тестировать какие-то запросы с этой базой.

    Теперь смотри на эти строчки с NULL и пойми почему условие users_products.u_id = 1 приводит к пустому набору.
    Там тупо нет строк, подходящих под это условие — таковы твои исходные данные!!!