我有2个表,一个用户表和一个贸易表。在同一个表中回显具有相同列名的多个值
看起来像:
我的代码,现在的结构是:
<?php
$history = mysqli_query($con, "SELECT * FROM .......");
while($row = mysqli_fetch_array($history)) {
echo("The sentence");
} ?>
问题,我面对的是,我想呼应USER_NAME这一个案例必须是接收者和其他人提供的。
我有2个表,一个用户表和一个贸易表。在同一个表中回显具有相同列名的多个值
看起来像:
我的代码,现在的结构是:
<?php
$history = mysqli_query($con, "SELECT * FROM .......");
while($row = mysqli_fetch_array($history)) {
echo("The sentence");
} ?>
问题,我面对的是,我想呼应USER_NAME这一个案例必须是接收者和其他人提供的。
专业提示:从不在软件中使用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
将消除这些重复项,因此将失去结果集中的有用信息。
这是我见过的别名中更好的插图之一。每过一段时间,你就会遇到'$ understanding ++;'谢谢! – JoshP 2014-10-02 02:25:56
你有没有指定你从这两个表中选择什么,而不是使用“*”选择器,并用单引号'$ fbid'环绕$ fbid? – 2014-10-02 00:33:03
我还没有,因为我认为这是没有意义的,因为我正在寻找的2个值都是user.user_name。 “$ fbid附近不应该产生影响,至少我已经测试了两者。 – 2014-10-02 01:21:01
对不起,但我不支持[已弃用的mysql_ *扩展名](http://php.net/manual/en/migration55.deprecated.php)的问题。 – CodeZombie 2014-10-02 01:21:05