【问题标题】:Why does MySQL return duplicate information in the returned JOIN array?MySQL为什么在返回的JOIN数组中返回重复信息?
【发布时间】:2011-06-11 13:29:04
【问题描述】:

我想知道我是否做错了什么,或者这只是 MySQL 处理一切的方式的一个怪癖。这是设置:(我似乎无法在其他任何地方找到这个确切的主题)

我有两个表 ordermenu

menu 有一个“id”(用于项目),一个“item ' 和每行三个价格('prc1' 'prc2' 'prc3')。

menu +----+----------+------+------+------+
     |'id'|  'item'  |'prc1'|'prc2'|'prc3'|
     +----+----------+------+------+------+
     |  1 | 'tshirt' | 3.00 | 4.50 | 4.00 |
     |  2 | 'socks'  | 1.00 | 2.50 | 2.00 |
     +----+----------+------+------+------+

order 还有一个与订单菜单匹配的项目 ID ('i_id'),以及我使用的整数用于稍后在 php ('prc_id') 中过滤价格。

order +------+--------+
      |'i_id'|'prc_id'|
      +--------+------+
      |  1   |   1    | # i_id matches id - tshirt and informs to use prc1
      |  2   |   3    | # i_id matchis id - socks and uses prc3
      +--------+------+

我使用 JOIN 将订单与商品匹配

"SELECT order.prc_id, menu.item, menu.prc1, menu.prc2, menu.prc3
        FROM order 
        LEFT JOIN menu 
        ON order.i_id = menu.id"

然后我得到结果,最初为了确保一切顺利,我打印了数组:

$result = mysql_query($query)
while($row = mysql_fetch_array($result))
    {
        print_r($row);
    }

这是我返回的数组(显然是初始测试的虚拟信息):

Array 
 ( 
    [0] => 1 [prc_id] => 1         #the value (1) for 'prc_id' is given twice
    [1] => tshirt [item] => tshirt #the value (tshirt) for 'item' is given twice
    [2] => 3.00 [prc1] => 3.00     #the value (3.00) for 'prc1' is given twice
    [3] => 4.50 [prc2] => 4.50     #etc
    [4] => 4.00 [prc3] => 4.00

    [0] => 3 [prc_id] => 3
    [1] => socks [item] => socks
    [2] => 1.00 [prc1] => 1.00 
    [3] => 2.50 [prc2] => 2.50 
    [4] => 2.00 [prc3] => 2.00
 )

所以我的问题(最后,对吗?xD)...为什么在数组响应中发回重复数据?

我做错了吗?我忽略了什么吗?

这不是一个大问题,它不会影响我的最终结果,我只是希望尽可能精确。

感谢您的宝贵时间。 :)

【问题讨论】:

    标签: sql mysql arrays join duplicate-data


    【解决方案1】:

    如果认为这是 PHP print_r() 问题。

    print_r() 返回一个数字表示,第二个是命名的存储行。

    编辑:

    使用数据库查询工具尝试查询,然后您将看到原始结果。

    【讨论】:

    • 嗯,谢谢。我什至没有想到print_r() 可能是问题所在。我确实从命令行运行它以使某些东西符合犹太教规。奇怪的是解释如此奇怪。再次感谢。 :)
    【解决方案2】:
         SELECT order.prc_id, menu.item, menu.prc1, menu.prc2, menu.prc3
         FROM order
          LEFT JOIN menu
          ON order.i_id = menu.id
    

    看起来您是基于order 中的item_idmenuid 加入的,而您应该基于(如果我理解正确的话)menuitem_id 加入。

    类似:

         SELECT order.prc_id, menu.item, menu.prc1, menu.prc2, menu.prc3
         FROM order
          LEFT JOIN menu
          ON order.i_id = menu.item_id
    

    【讨论】:

    • 我确实匹配项目的 ID。我改变了上面的一些格式,希望能澄清一下。我得到了 proper 数据,我只是得到了冗余的正确数据。例如:[1] => tshirt [item] => tshirt [2] => 3.00 [prc1] => 3.00 它返回一个索引:1 w/ value:tshirt,一个索引:item w/ val:tshirt...然后是指数:2 of 3.00 和指数:prc1 w/ val:3.00。我想知道......为什么会出现冗余?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-11
    • 2013-11-28
    • 1970-01-01
    • 1970-01-01
    • 2014-10-30
    • 2012-03-27
    • 2018-12-15
    相关资源
    最近更新 更多