2014-10-02 69 views
2

我有2个表,一个用户表和一个贸易表。在同一个表中回显具有相同列名的多个值

看起来像:

enter image description here

我的代码,现在的结构是:

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

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

问题,我面对的是,我想呼应USER_NAME这一个案例必须是接收者和其他人提供的。

+1

你有没有指定你从这两个表中选择什么,而不是使用“*”选择器,并用单引号'$ fbid'环绕$ fbid? – 2014-10-02 00:33:03

+0

我还没有,因为我认为这是没有意义的,因为我正在寻找的2个值都是user.user_name。 “$ fbid附近不应该产生影响,至少我已经测试了两者。 – 2014-10-02 01:21:01

+0

对不起,但我不支持[已弃用的mysql_ *扩展名](http://php.net/manual/en/migration55.deprecated.php)的问题。 – CodeZombie 2014-10-02 01:21:05

回答

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 

看看我们如何JOINuser表两次,有两个不同的别名s(发送者)和r(接收机)?这是从ID中获取这两个名称的诀窍。

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

现在,当您使用php fetch_array函数时,您将在数组中结束这些元素。

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

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

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

+0

这是我见过的别名中更好的插图之一。每过一段时间,你就会遇到'$ understanding ++;'谢谢! – JoshP 2014-10-02 02:25:56

相关问题