У меня возникли проблемы с выполнением запроса, который получает всю информацию из нескольких таблиц с помощью INNER JOIN.Таблица p_cards
является «основной таблицей», которая имеет отношение 1-M.Это означает, что любая другая таблица (p_images
, p_infotext
, p_rules
может иметь несколько строк, связанных с одним и тем же идентификатором)
Моя функция следующая:
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
.Для каждого изображения, связанного с этим идентификатором, оно будет ассоциировать информацию с p_cards.
Я бы не хотел иметь дублированную информацию.Как мне этого добиться?
Редактировать:
Таблица p_cards
Таблица p_images
Существуют и другие таблицы, но этого достаточно, чтобы показать их (поскольку существует много таблиц, каждая из которых работает как 1-M)
Когда я выполняю запрос, я получаюинформация p_card для каждой информации в p_images (и других таблицах):
Таким образом, я ожидаю получить что-то подобное, поэтому я могу использовать эту информацию для создания формы дляотредактируйте данные:
id
slug
card_number
...
--[images]
---[en]
----thumb_img
----full_size
----name
---[pt]
----thumb_img
...
Вместо одной строки со всей информацией.Какой будет лучший подход?