Mẹo chuyên nghiệp: Không bao giờ sử dụng SELECT *
trong phần mềm trừ khi bạn biết chính xác tại sao bạn lại làm như vậy. Trong trường hợp của bạn, nó có hại.
Tôi giả định rằng truy vấn của bạn thực sự chống lại người dùng user
và trade
bảng bạn đã đề cập trong câu hỏi của mình.
Trước tiên, hãy viết lại truy vấn của bạn bằng cách sử dụng SQL thế kỷ 21, như sau:
SELECT *
FROM trade AS t
JOIN user AS s ON s.user_id = t.user_id_sender
WHERE s.facebook_id = $fbid
Thứ hai, sử dụng điều này để truy xuất tên người dùng của bạn và id mặt hàng đã giao dịch.
SELECT s.user_name AS sender,
r.user_name AS receiver,
t.trade_id AS item_id
FROM trade AS t
JOIN user AS s ON s.user_id = t.user_id_sender
JOIN user AS r ON r.user_id = t.user_id_receiver
WHERE s.facebook_id = $fbid
Xem cách chúng tôi JOIN
người dùng user
bảng hai lần, với hai bí danh khác nhau s
(dành cho người gửi) và r
(cho người nhận)? Đó là mẹo để tìm nạp cả hai tên từ ID.
Xem cách chúng tôi sử dụng bí danh sender
và bộ thu user
để phân biệt hai user_name
các cột trong tập kết quả?
Bây giờ, khi bạn sử dụng php fetch_array
, bạn sẽ kết thúc với các phần tử này trong mảng.
$history['sender']
$history['receiver']
$history['item_id']
Chuỗi chỉ mục mảng tương ứng với tên bí danh bạn đã chỉ định trong SELECT
của mình mệnh đề trong truy vấn của bạn.
Vì vậy, một lý do để tránh SELECT *
là bạn có thể nhận được nhiều hơn một cột có cùng tên và điều đó có nghĩa là fetch_array
sẽ loại bỏ các bản sao đó và do đó, nó sẽ làm mất thông tin hữu ích từ tập hợp kết quả của bạn.