Почему MySQL возвращает повторяющуюся информацию в возвращенном массиве JOIN?

0

Мне интересно, что я делаю что-то не так, или если это просто причуда в том, как все обрабатывается в MySQL. Здесь настройка: (я не могу найти эту точную тему где-нибудь еще)

У меня есть две таблицы порядок и меню.

меню имеет 'id' (для элемента), 'item' и три цены ('prc1' 'prc2' 'prc3') в каждой строке.

menu +----+----------+------+------+------+
     |'id'|  'item'  |'prc1'|'prc2'|'prc3'|
     +----+----------+------+------+------+
     |  1 | 'tshirt' | 3.00 | 4.50 | 4.00 |
     |  2 | 'socks'  | 1.00 | 2.50 | 2.00 |
     +----+----------+------+------+------+

order также имеет идентификатор элемента для соответствия меню заказа ('i_id') и целое число, которое я использую для фильтрации цен позже в php ('prc_id').

order +------+--------+
      |'i_id'|'prc_id'|
      +--------+------+
      |  1   |   1    | # i_id matches id - tshirt and informs to use prc1
      |  2   |   3    | # i_id matchis id - socks and uses prc3
      +--------+------+

Я использую JOIN для соответствия заказам до элементов

"SELECT order.prc_id, menu.item, menu.prc1, menu.prc2, menu.prc3
        FROM order 
        LEFT JOIN menu 
        ON order.i_id = menu.id"

Затем я возвращаю результат, и изначально, чтобы убедиться, что все отлажено, я напечатал массив:

$result = mysql_query($query)
while($row = mysql_fetch_array($result))
    {
        print_r($row);
    }

Это массив, который я возвращаю (очевидно, фиктивная информация для начальных тестов):

Array 
 ( 
    [0] => 1 [prc_id] => 1         #the value (1) for 'prc_id' is given twice
    [1] => tshirt [item] => tshirt #the value (tshirt) for 'item' is given twice
    [2] => 3.00 [prc1] => 3.00     #the value (3.00) for 'prc1' is given twice
    [3] => 4.50 [prc2] => 4.50     #etc
    [4] => 4.00 [prc3] => 4.00

    [0] => 3 [prc_id] => 3
    [1] => socks [item] => socks
    [2] => 1.00 [prc1] => 1.00 
    [3] => 2.50 [prc2] => 2.50 
    [4] => 2.00 [prc3] => 2.00
 )

Итак, мой вопрос (наконец, правильно? xD)... Почему дублированные данные отправляются обратно в ответ массива?

Я сделал что-то не так? Я что-то пропускаю?

Это не огромная проблема, это не влияет на мой конечный результат, я просто хотел бы быть максимально точным.

Спасибо за ваше время.:)

Теги:
arrays
join

2 ответа

1
Лучший ответ

Если вы считаете, что это проблема с PHP print_r().

print_r() возвращает числовое представление, а второе - строку с именем store.

EDIT:

Попробуйте выполнить запрос с помощью инструмента запроса базы данных, после чего вы увидите исходный результат.

  • 0
    Хм, спасибо. Мне даже в голову не print_r() что print_r() может быть проблемой. Я действительно запустил его из командной строки, чтобы некоторые вещи были кошерными. Просто странно, что интерпретация такая странная. Еще раз спасибо. :)
-1
     SELECT order.prc_id, menu.item, menu.prc1, menu.prc2, menu.prc3
     FROM order
      LEFT JOIN menu
      ON order.i_id = menu.id

Похоже, вы присоединяетесь к item_id в order и id из menu, в то время как вы должны делать на основе (если я правильно понимаю) item_id of menu.

Что-то вроде:

     SELECT order.prc_id, menu.item, menu.prc1, menu.prc2, menu.prc3
     FROM order
      LEFT JOIN menu
      ON order.i_id = menu.item_id
  • 0
    Я совпадаю с идентификатором предмета. Я изменил некоторые из форматирования выше, надеюсь, чтобы уточнить. Я получаю правильные данные, я просто получаю избыточные правильные данные. Например: [1] => tshirt [item] => tshirt [2] => 3.00 [prc1] => 3.00 Возвращает индекс: 1 w / value: tshirt, индекс: item w / val: tshirt ... затем индекс: 2 из 3,00 и индекс: prc1 w / val: 3,00. Мне интересно ... почему избыточность?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню