#php #mysql #loops #mysqli
#php #mysql #циклы #mysqli
Вопрос:
У меня есть плагин, который по какой-то причине сохраняет данные в действительно раздражающих местах (3 разные таблицы с одинаковыми именами и т. Д.).
Я добавил в cms 4 поля, которые я хочу отобразить в элементе. Функция, имя, текст и изображение. Проблема в том, что все 4 хранятся в базе данных под одним и тем же именем data
. Единственное различие между ними заключается в их field_id
.
Итак, я получил правильный запрос, который получает все необходимые мне данные, мой запрос следующий:
SELECT ct . * , fe . * , cn . * , dt . *
FROM web_content ct
INNER JOIN web_fieldsandfilters_elements fe ON fe.item_id = ct.id
INNER JOIN web_fieldsandfilters_connections cn ON cn.element_id = fe.id
INNER JOIN web_fieldsandfilters_data dt ON dt.element_id = fe.id
WHERE ct.id
IN (
'46'
)
Приведенный выше запрос возвращает одну и ту же строку несколько раз, только с разными данными. Поэтому, когда я зацикливаю вывод, он показывает элемент несколько раз, а не только один раз.
Как я могу объединить выходные данные вместе?
Весь мой цикл с запросом в том виде, в каком он у меня есть сейчас:
<?
//Query om referentie op de dienstenpage te laten zien
$referentie = "
SELECT ct.*, fe.*, cn.*, dt.*
FROM web_content ct
INNER JOIN web_fieldsandfilters_elements fe on fe.item_id = ct.id
INNER JOIN web_fieldsandfilters_connections cn on cn.element_id = fe.id
INNER JOIN web_fieldsandfilters_data dt on dt.element_id = fe.id
WHERE ct.id IN ('".$contentcr[0]['id']."')";
$referentiecon = $conn->query($referentie);
$referentiecr = array();
while ($referentiecr[] = $referentiecon->fetch_array());
?>
<div class="container">
<div class="row">
<div class="col-md-12 wow fadeInUp animated animated">
<?
foreach($referentiecr as $referentietext){
if($referentietext['field_id'] != ''){
if($referentietext['field_id'] == '8'){
$referentie_images = $referentietext['data'];
$ref_pictures = json_decode($referentie_images);
if($ref_pictures->{'image'} != ''){
$image = 'cms/'.$ref_pictures->{'image'};
}else{
$image .= '';
}
}
if($referentietext['field_id'] == '5'){
$naam = $referentietext['data'];
}
if($referentietext['field_id'] == '6'){
$text = $referentietext['data'];
}
if($referentietext['field_id'] == '7'){
$functie = $referentietext['data'];
}
$refoverzicht .= '
<div class="col-md-4">
<img src="'.$image.'" style="max-width:100%;">
</div>
<div class="col-md-8">
<blockquote>
<p style="font-size: 14px;">
'.$text.'
<br>
<em>– '.$naam.' – '.$functie.'</em>
</p>
</blockquote>
</div>';
}
}
echo $refoverzicht;
?>
В результате получается следующее:
Комментарии:
1. Я упускаю вашу точку зрения или вы должны просто использовать sse
GROUP BY ct.id
иGROUP_CONCAT
вSELECT
предложении?
Ответ №1:
Я не могу придумать способ на уровне запроса, если вы специально не выберете столбцы и не дадите им псевдоним. Например. выберите ct.field_id как ct_field_id ….