繁体   English   中英

PHP INNER JOIN sql查询具有多个表的重复信息

[英]PHP INNER JOIN sql query with multiple tables duplicated information

我在使用INNER JOIN进行查询以从多个表中获取所有信息时遇到了一些麻烦。 p_cards是具有1-M关系的“主表”。 这意味着每隔一个表( p_imagesp_infotextp_rules可以具有与同一ID关联的多个行)

我的功能如下:

function GetpById($mysqli, $id) {
    if($stmt = $mysqli->prepare("
        SELECT * 
        FROM p_cards 
        INNER JOIN p_images ON p_images.card_id = p_cards.id
        INNER JOIN p_infotext ON p_infotext.card_id = p_cards.id
        INNER JOIN p_rules ON p_rules.card_id = p_cards.id
        WHERE p_cards.id = ?
    ")) {
        $stmt->bind_param("i", $id);
        $stmt->execute() or trigger_error($stmt->error, E_USER_ERROR);
        ($stmt_result = $stmt->get_result()) or trigger_error($stmt->error, E_USER_ERROR);
        if ($stmt_result->num_rows>0) {
            while($row_data = $stmt_result->fetch_assoc()){
                $array[] = $row_data;
            }
            return $array   
        } else {
            return false;
        }
    } else {
        return false;
    }
}

使用上述功能,它将为其他表中的每个不同行创建一个完整行,从而使p_cards中的信息重复。 例如,p_images表将具有idp_idimagelanguage 对于每个存在的与该ID关联的图像,它将关联p_cards的信息。

我想要的是没有重复的信息。 我该如何实现?

编辑:

表p_cards 表p_cards

表p_images t p_images

还有其他表,但足以显示它(因为有很多表,每个表都以1-M工作)

当我执行查询时,对于p_images(和其他表)中的每个信息,我都会得到p_card的信息: 在此处输入图片说明

通过这种方式,我希望得到类似的信息,因此我可以使用该信息来制作表格来编辑数据:

id
slug
card_number
...
--[images]
---[en]
----thumb_img
----full_size
----name
---[pt]
----thumb_img
...

而不是将所有信息都排成一行。 最好的方法是什么?

对于同一个卡号,您会得到多行,因为在与之连接的表中有多行它。

如果每个卡ID仅希望有一行,则可以使用GROUP BY p_cards.id,然后使用GROUP_CONCAT()函数获得其他表中不同值的逗号分隔列表。

但是,在您的情况下,我认为最好执行3个单独的查询,而不要在联接中执行此操作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM