Объединение нескольких записей в один вывод

#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 ….