在同一个表中回显具有相同列名的多个值

时间:2014-10-02 00:30:22

标签: php mysql

我有2个表,一个用户表和一个交易表。

看起来像:

enter image description here

我现在的代码结构是:

<?php 
$history = mysqli_query($con, "SELECT * FROM .......");

while($row = mysqli_fetch_array($history)) { 
echo("The sentence");
} ?>

我面临的问题是我试图回应user_name,在一种情况下必须是接收者和其他人提供它。

1 个答案:

答案 0 :(得分:4)

专业提示:从不在软件中使用SELECT *,除非您确切知道为什么这样做。在你的情况下它是有害的。

我假设您的查询确实违反了您在问题中提到的usertrade表格。

首先,使用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中获取两个名称的技巧。

了解我们如何使用别名senderreceiver来消除结果集中两个user_name列的歧义?

现在,当你使用php fetch_array函数时,你最终会在数组中使用这些元素。

$history['sender']
$history['receiver']
$history['item_id']

数组索引字符串对应于您在查询中的SELECT子句中指定的别名。

因此,避免SELECT *的一个原因是您可以获得多个具有相同名称的列,这意味着fetch_array将消除这些重复项,因此它会从您的结果中丢失有用的信息集。