Мне интересно, что я делаю что-то не так, или если это просто причуда в том, как все обрабатывается в 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)... Почему дублированные данные отправляются обратно в ответ массива?
Я сделал что-то не так? Я что-то пропускаю?
Это не огромная проблема, это не влияет на мой конечный результат, я просто хотел бы быть максимально точным.
Спасибо за ваше время.:)
Если вы считаете, что это проблема с PHP print_r()
.
print_r()
возвращает числовое представление, а второе - строку с именем store.
EDIT:
Попробуйте выполнить запрос с помощью инструмента запроса базы данных, после чего вы увидите исходный результат.
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
print_r()
чтоprint_r()
может быть проблемой. Я действительно запустил его из командной строки, чтобы некоторые вещи были кошерными. Просто странно, что интерпретация такая странная. Еще раз спасибо. :)