|
|
|
| Есть две таблицы:
Таблица со статьями:
CREATE TABLE articles(
id_article INT(11) NOT NULL AUTO_INCREMENT,
title TINYTEXT NOT NULL ,
body TEXT NOT NULL,
PRIMARY KEY (id_article)
)
|
Таблица с метками:
CREATE TABLE articles_tags(
id_article INT(11) NOT NULL COMMENT 'Ключ на стаью',
tag VARCHAR(255) NOT NULL COMMENT 'Метка в тарнслите',
name VARCHAR(255) NOT NULL COMMENT 'Название метки (кирилица)',
INDEX tag (tag (10))
)
|
Для постраничной навигации нужно посчитать кол-во записей в запросе, с фильтром по метке.
Делаю такой запрос:
SELECT COUNT(*) FROM articles
LEFT JOIN articles_tags ON articles_tags.id_article = articles.id_article
WHER articles_tags.tag = 'sport'
|
Если метка есть не более чем у одной статьи, то все норм, а если метка у двух и более статей, то данный запрос выдает не верное кол-во записей.
Как я понимаю, считает неправильно именно потому, что в правой табилце "articles_tags" есть несколько записей соответствующие одной записи в левой таблице "articles". В другом бы случае я бы просто добавил GROUP BY articles.id_article, но в данном случае, с COUNT(*) это дает совершенно другой результат.
Как посчитать кол-во записей в данном случае? Кто занет, подскажите плиз. Очень нужно. | |
|
|
|
|
|
|
|
для: tAleks
(29.07.2011 в 15:36)
| | Никто не знает? | |
|
|
|
|
|
|
|
для: tAleks
(29.07.2011 в 15:36)
| | >Для постраничной навигации нужно посчитать кол-во записей в запросе, с фильтром по метке.
А что из себя представляет исходный запрос? Что он выбирает - метки всех статей с данным ключевым словом или метки какой-то одной статьи? Если последнее, то у вас не указано к какой статье относятся метки, если первое не очень понятно зачем вообще объединение? | |
|
|
|
|
|
|
|
для: cheops
(30.07.2011 в 09:59)
| | >А что из себя представляет исходный запрос? Что он выбирает - метки всех статей с данным ключевым словом или метки какой-то одной статьи? Если последнее, то у вас не указано к какой статье относятся метки, если первое не очень понятно зачем вообще объединение?
Исходный запрос выбирает сами статьи. Т.е. нужно вывести список статей. А метки храняться в таблице articles_tags. И косяк получается, если делается выборка статей с конкретной меткой.
Прмер запроса статей:
SELECT
articles.id_article,
articles.title,
articles.body,
articles_tags.tag,
articles_tags.name AS tag_name
FROM articles
LEFT JOIN articles_tags ON articles_tags.id_article = articles.id_article
WHERE articles_tags = 'spotr'
GROUP BY articles.id_article
ORDER BY $order $sort
LIMIT $start, $numrec";
|
| |
|
|
|
|
|
|
|
для: tAleks
(30.07.2011 в 11:31)
| | Т.е. вам нужны сами статьи? Тогда вместо COUNT(*) следует использовать COUNT(articles.id_article), а еще лучше COUNT(DISTINCT articles.id_article), тогда вы получите количество уникальных статей, для которых указано текущее ключевое слово. | |
|
|
|
|
|
|
|
для: cheops
(30.07.2011 в 11:38)
| | Спасибо! То, что надо! | |
|
|
|