вывести без повтора

200
12 марта 2017, 08:01

есть код рабочий но в нем при выборке всегда повторяется $content пробовал ставить group by но это не спасает так как выборка из соседней таблицы не происходит

$result = $pdo->prepare('SELECT DISTINCT news.content, newsImg.id, newsImg.idNews, newsImg.img_Realtor, newsImg.filename, newsImg.imgRealtorSmall, newsImg.fileNameSmall 
FROM news 
LEFT JOIN newsImg 
ON news.id=newsImg.idNews 
ORDER BY newsImg.id DESC;'); 
$result->execute(); 
if($result->rowCount() > 0){ 
      
    while ($myrow = $result->fetch(PDO::FETCH_ASSOC)){ 
    $content = $myrow["content"]; 
    $idNews = $myrow["idNews"]; 
    $img_Realtor = $myrow["img_Realtor"]; 
    $filename = $myrow["filename"]; 
    $imgRealtorSmall = $myrow["imgRealtorSmall"]; 
    $fileNameSmall = $myrow["fileNameSmall"]; 
 
    $file = explode(',', $fileNameSmall); 
    
          echo" <div class='col-md-12'> 
                  <h5>".$content."</h5>"; 
                 
 
           foreach ($file as $key) { 
                echo 
                  "<img src='".$imgRealtorSmall.$key."' style='width: 100px; height: 100px; margin-bottom: 10px;'></div><hr><br>"; 
       } 
    } 
 
  }                 

Answer 1

Вашу задачу можно решить с помощью использования переменных в запросе SQL. Для наглядности вот подготовка данных:

CREATE TABLE NewsImg (
  Id INT,
  NewsId INT,
  FileName VARCHAR(50)
);
CREATE TABLE News (
  Id INT,
  content VARCHAR(10024)
);
INSERT News SELECT 3, 'some third content';
INSERT News SELECT 4, '<3 <3 <3 <3 <3 <3.';
INSERT News SELECT 5, '(.)(.)(.)(.)(.)(.)';
INSERT NewsImg SELECT 1, 3, 'file1.jpg';
INSERT NewsImg SELECT 2, 3, 'file2.jpg';
INSERT NewsImg SELECT 3, 4, 'file3.jpg';
INSERT NewsImg SELECT 4, 4, 'file4.jpg';
INSERT NewsImg SELECT 5, 5, 'file5.jpg';

Ваш запрос в упрощённом виде:

SELECT N.content, I.*
FROM News N
  LEFT JOIN NewsImg I ON N.Id = I.NewsId
ORDER BY I.Id DESC

Его результат:

content, Id, NewsId, FileName
(.)(.)(.)(.)(.)(.), 5, 5, file5.jpg
<3 <3 <3 <3 <3 <3., 4, 4, file4.jpg
<3 <3 <3 <3 <3 <3., 3, 4, file3.jpg
some third content, 2, 3, file2.jpg
some third content, 1, 3, file1.jpg

Запрос с использованием переменных:

SELECT 
  IF (RowType = 'First', content, null) content,
  Id, NewsId, FileName
FROM(
  SELECT N.content, I.*, 
    IF(@LastNewsId = I.NewsId, 'Not first', 'First')RowType, 
    @LastNewsId := I.NewsId
  FROM News N
    LEFT JOIN NewsImg I ON N.Id = I.NewsId
    CROSS JOIN (SELECT @LastNewsId := NULL)L
  ORDER BY I.NewsId DESC, I.Id DESC
)T

Результат:

# content, Id, NewsId, FileName
(.)(.)(.)(.)(.)(.), 5, 5, file5.jpg
NULL              , 4, 4, file4.jpg
<3 <3 <3 <3 <3 <3., 3, 4, file3.jpg
NULL              , 2, 3, file2.jpg
some third content, 1, 3, file1.jpg

Я не буду подробно расписывать как это работает. Можете прочесть на эту тему статью: MySQL. Использование переменных в запросе

READ ALSO
Своя сортировка массива

Своя сортировка массива

Я хочу, что бы массив был отсортирован случайным образом, я сделал условие, что бы если в массиве такой элемент есть, то он повторно не добавлялся,...

241
Как правильно вставить html в php

Как правильно вставить html в php

Добрейшего вечерочка!

231
Генератор кода Gii в Yii2 [требует правки]

Генератор кода Gii в Yii2 [требует правки]

Добрый вечер, попытался сгенерировать код с помощью Gii в Yii2, в итоге получил такое сообщение:

435
Вывод данных из двух таблиц

Вывод данных из двух таблиц

Просьба помочь в решении следующего вопроса

300