左表连接后ID丢失

时间:2015-10-08 20:49:32

标签: mysql left-join

嘿,我试过这个帖子,但它不起作用,我无法弄清楚为什么......

这是我的SQL:

SELECT * FROM gone_items
        LEFT JOIN items
        ON gone_items.item_ID=items.ID
        WHERE
        gone_items.aus_ID='$ID'
        ORDER BY items.name ASC

现在,我通过PHP获取并拥有$ row并尝试使用另一个mysql来获取gone_items表的各个ID。但是如果我使用$ row [' ID']我会获得items.ID的ID而不是来自gone_items.ID的ID。

我尝试在第一个查询中手动设置变量,但它不起作用。

我也试过这个:MYSQL Left join A.table and b.table while retaining a.table id

也没帮我...

我想要的只是保留gone_items表中的ID(主键)..

有谁能告诉我我做错了什么?

爱 克

修改

        //Query for Joined infos
$sqlx="SELECT foto_res_ausgeliehene_geg.ID, foto_res_ausgeliehene_geg.aus_ID, foto_res_ausgeliehene_geg.geg_ID, foto_res_ausgeliehene_geg.zusaetzliches, foto_res_gegenstaende.ID, foto_res_gegenstaende.bezeichnung, foto_res_gegenstaende.seriennummer, foto_res_gegenstaende.interne_seriennummer, foto_res_gegenstaende.zusaetzliches FROM foto_res_ausgeliehene_geg
        LEFT JOIN foto_res_gegenstaende
        ON foto_res_ausgeliehene_geg.geg_ID=foto_res_gegenstaende.ID
        WHERE
        foto_res_ausgeliehene_geg.aus_ID='$ID'
        ORDER BY foto_res_gegenstaende.bezeichnung ASC
        ";
            $ergebnisx = mysqli_query($db,$sqlx);
            while ($zeilex = mysqli_fetch_assoc($ergebnisx))
            {
                //Query for individual infos
                $sqly="SELECT * FROM foto_res_ausgeliehene_geg
                        WHERE `geg_ID`='".$zeilex['ID']."'
                        AND `aus_ID`='$ID'
                        GROUP BY `geg_ID`
                        ";
                        $ergebnisy = mysqli_query($db,$sqly);
                        while ($zeiley = mysqli_fetch_assoc($ergebnisy))
                        {};

现在我确实单独选择了所有项目。由于LEFT JOIN,foto_res_ausgeliehene_geg.ID仍然与foto_res_gegenstanede.ID合并。

因此,如果我访问$ zeilex [' ID']即可获取foto_res_gegenstaende.ID的ID。

如果我将其中一个表格中的ID字段重命名为item_ID,会有帮助吗?

非常感谢。

爱 克。

2 个答案:

答案 0 :(得分:1)

您应该明确说明要选择的项目,而不是使用select *。否则,您可能会遇到多个id字段的冲突。在你的情况下像:

select gone_items.id, gone_items.column1, gone_items.column2, items.column1, items.column2

限制所选数据的数量也被视为良好做法。但同时也是一个高度辩论的正确方法。 Performance issue in using SELECT *?

答案 1 :(得分:0)

务!

我只是将其中一个主要ID密钥重命名为其他内容,在这种情况下,其中一个获得了ID - > ITEM_ID。另一个仍为ID,左联接不会合并它们。

YOLO

修改

工作代码

    $sqlx="SELECT foto_res_ausgeliehene_geg.item_ID, foto_res_ausgeliehene_geg.aus_ID, foto_res_ausgeliehene_geg.geg_ID, foto_res_ausgeliehene_geg.zusaetzliches, foto_res_gegenstaende.ID, foto_res_gegenstaende.bezeichnung, foto_res_gegenstaende.seriennummer, foto_res_gegenstaende.interne_seriennummer, foto_res_gegenstaende.zusaetzliches FROM foto_res_ausgeliehene_geg
        LEFT JOIN foto_res_gegenstaende
        ON foto_res_ausgeliehene_geg.geg_ID=foto_res_gegenstaende.ID
        WHERE
        foto_res_ausgeliehene_geg.aus_ID='$ID'
        ORDER BY foto_res_gegenstaende.bezeichnung ASC
        ";
            $ergebnisx = mysqli_query($db,$sqlx);
            while ($zeilex = mysqli_fetch_assoc($ergebnisx))
            {
                //Query for individual infos
                $sqly="SELECT * FROM foto_res_ausgeliehene_geg
                        WHERE `item_ID`='".$zeilex['item_ID']."'
                        ";
                        $ergebnisy = mysqli_query($db,$sqly);
                        while ($zeiley = mysqli_fetch_assoc($ergebnisy))
                        {