Мне сложно найти класс базы данных PDO, который я пишу, чтобы хорошо играть с запросами, которые мы предлагаем в предложениях GROUP BY.PDO GROUP BY не возвращает результаты
Например, я хочу получить список статей в базе данных, но статьи связаны с тегами, используя отношения многих и многих.
т.е. статьи> статья-тег-ссылка < теги
Запрос Я пытаюсь запустить очень просто:
SELECT * FROM articles, article-tag-link, tags WHERE articles.articleID = article-tag-link.articleID AND tags.tagID = article-tag-link.tagID GROUP BY articles.articleID LIMIT 3;
Я использую подготовленное заявление для выполнения запроса с PDO , и я знаю, что простые запросы без GROUP BY отлично работают, поскольку в других местах он не используется.
Так что, когда дело доходит до выполнения запроса, я делаю:
$result = $stmt->execute();
$results = $stmt->fetchAll(PDO::FETCH_ASSOC);
Это возвращает результаты, я хочу, хотя они не сгруппированы должным образом. То есть одна статья, которая может иметь 3 тега, появится три раза (так как есть технически три записи, удовлетворяющие запросу - исключая GROUP BY). Так что, как будто GROUP BY игнорируется.
Я пришел через
$results = $stmt->fetchAll(PDO::FETCH_ASSOC | PDO::FETCH_GROUP);
$results = array_map('reset', $results);
Но что ведет себя так же, как ни странно. Это вернет только один результат (он не возвращает первую статью три раза - один раз для каждого прикладного тега), но он остановится на одном единственном результате - он не будет продолжать извлекать еще два.
Может кто-нибудь объяснить, как получить его для получения трех уникальных записей, удовлетворяющих запросу?
мне удалось найти решение самостоятельно и Виль Я пишу это для всех, кто мог совершить ту же ошибку. Поскольку я написал свою собственную PDO-оболочку, я передавал все значения для запросов с помощью метода. Метод позаботился о том, чтобы подготовить заявление и связать все. То, что я делал, случайно пыталось связать значение GROUP BY, которое вызывало проблемы. Просто помните, чтобы не связывать это, и иметь GROUP BY как обычную часть отформатированного запроса. – Amo