- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
Вот запрос:
cms_catalog_list - таблица записей
у каждой записи есть id раздела - id_cat, поле actv и еще там всякие поля.
cms_catalog_cats - таблица доплнительных разделов
состоит из id_list - номера записи и id_cat - номера раздела.
В данном примере цирфа 43, просто номер просматриваемого раздела.
В таблице 13 записей с разделом 43.
И в таблице дополнительных разделов указано, что к 43-му еще одна принадлежит запись.
И так в чем трабла. Если делать запрос count(*) то выдает 27 записей.
В phpmyadmin выводит 14 строк, в 13-ти стоит 2, в 14-м 1.
Если заменить count(*) на просто * выводит искомые 14 записей и ничего более. Что за хрень?
P.S. Кавычки не везде, пальцем не тыкать :)
был бы дампик поиграться, а то так непонятно)
Если надо выбрать количество сообщений для каждой рубрики, то
SELECT count(*),cats.id
FROM cms_catalog_list cl
INNER JOIN cms_catalog_cats cats
ON cats.id_list = cl.id
WHERE cl.`actv` = '1'
GROUP BY cats.id
как-то так, если я правильно структуру понял
jumash, не, такой вариант никак не катит.
Lord Maverik добавил 05.02.2009 в 12:30
был бы дампик поиграться, а то так непонятно)
Немогу пока дампик сделать.
Lord Maverik добавил 05.02.2009 в 12:33
Я логически понимаю в чем прикол.
То что каждый раз выбирая записи, мы получаем пару из первой и второй таблицы, потому идет 2-ка, на последней записи там одна пара. Это из за условия или.
Как изменить, незнаю-что :(
Я не знаю, понял ли меня кто :)
Сделай хотя бы руками пример БД с данными=) Тогда будет более-менее понятно)
И ожидаемый результат в примере
Вот запрос:
или right outer join
короче, если имеется group by, то все столбцы, указанные в нём,
должны обязятельно быть в списке выбираемых + count(*)
БД спроектирована не верно! Или у каждой записи может быть только один раздел и его ID хранится в таблице cms_catalog_list и таблица cms_catalog_cats не нужна либо у каждой записи может быть несколько разделов - в таком случае в табличке с записями не нужно хранить ID какого то одного раздела, а дополнительные в отдельной табличке - все разделы хранить в таблице связей (у вас как я понял cms_catalog_list).
У вас явно что то избыточное - или поле ID раздела в таблице записей или таблица связей.
Если у вас все таки связь один ко многим и есть необходимости выделить какой-то основной раздел, то его необходимо просто отметить в таблице связи как основной.
-K-, в большинстве случаев идет жесткая связь 1 к 1. 1 ко многим применяется достаточно редко, потому идет как дополнение. Т.е. это дело можно включить, а можно отключить.
Поизучаю операторы join, главное чтобы работало быстра еще при этом.
Lord Maverik добавил 06.02.2009 в 07:32
В общем я выяснил, что мой запрос вообще нифига не работает толком :(
И сделал как посоветовал -K-, изменил связи таблиц на 1 ко многим, и теперь одним простым запросом все данные легко выбираются.