我有2个表,一个用户表和一个交易表。
看起来像:
我现在的代码结构是:
<?php
$history = mysqli_query($con, "SELECT * FROM .......");
while($row = mysqli_fetch_array($history)) {
echo("The sentence");
} ?>
我面临的问题是我试图回应user_name,在一种情况下必须是接收者和其他人提供它。
答案 0 :(得分:4)
专业提示:从不在软件中使用SELECT *
,除非您确切知道为什么这样做。在你的情况下它是有害的。
我假设您的查询确实违反了您在问题中提到的user
和trade
表格。
首先,使用21世纪的SQL重铸您的查询,如下所示:
SELECT *
FROM trade AS t
JOIN user AS s ON s.user_id = t.user_id_sender
WHERE s.facebook_id = $fbid
其次,使用它来检索用户的姓名和交易的商品ID。
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
查看我们JOIN
表格user
两次,两个不同的别名s
(发件人)和r
(收件人)?这是从ID中获取两个名称的技巧。
了解我们如何使用别名sender
和receiver
来消除结果集中两个user_name
列的歧义?
现在,当你使用php fetch_array
函数时,你最终会在数组中使用这些元素。
$history['sender']
$history['receiver']
$history['item_id']
数组索引字符串对应于您在查询中的SELECT
子句中指定的别名。
因此,避免SELECT *
的一个原因是您可以获得多个具有相同名称的列,这意味着fetch_array
将消除这些重复项,因此它会从您的结果中丢失有用的信息集。