[英]PHP INNER JOIN sql query with multiple tables duplicated information
我在使用INNER JOIN进行查询以从多个表中获取所有信息时遇到了一些麻烦。 表p_cards
是具有1-M关系的“主表”。 这意味着每隔一个表( p_images
, p_infotext
, p_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表将具有id
, p_id
, image
, language
。 对于每个存在的与该ID关联的图像,它将关联p_cards的信息。
我想要的是没有重复的信息。 我该如何实现?
编辑:
还有其他表,但足以显示它(因为有很多表,每个表都以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.