【发布时间】:2019-03-23 02:32:24
【问题描述】:
我在使用 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
...
而不是在一行中包含所有信息。 最好的方法是什么?
【问题讨论】:
-
请显示示例数据以证明重复项。在这里使用
DISTINCT或GROUP BY可能是合适的。 -
展示您的收获和期望,谢谢!
-
@TimBiegeleisen 。我已经编辑了线程,看看它是否更好理解。我真的不知道如何更好地解释。
-
@SalimIbrogimov 完成
-
屏幕截图很难阅读。请以文本的形式包含数据。这里的目标不是包含大量数据,而是足以让人们明白这一点。很可能,有一个简单的解决方法可以解决您的问题,但目前还看不到答案。
标签: php mysql mysqli inner-join