Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / помощь с запросом / 7 сообщений из 7, страница 1 из 1
06.03.2017, 23:46
    #39415096
tadeyiloda
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помощь с запросом
есть такой запрос
Код: sql
1.
SELECT product.* FROM product JOIN product_tag ON product.id=product_tag.product_id WHERE tag_id in (SELECT tag_id FROM product_page_tag WHERE product_page_id=2) GROUP BY id HAVING COUNT(id) = (SELECT COUNT(tag_id) FROM product_page_tag WHERE product_page_id=2)


как мне посчитать количество строк?
в лоб через count не получилось
...
Рейтинг: 0 / 0
07.03.2017, 06:14
    #39415136
помощь с запросом
tadeyiloda,

не очень понятно, что же всё-таки у тебя есть и что нужно получить... Количество каких строк и где ты хочешь посчитать?
то, что MySQL умеет группировать через жопу - не повод привыкать писать запросы в таком стиле... Уж если используешь группировку, то явно укажи, что необходимо сделать с полями, не входящими в предложении GROUP BY, но попадающие в список SELECT.
...
Рейтинг: 0 / 0
07.03.2017, 07:43
    #39415146
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помощь с запросом
tadeyiloda, описывайте задачу, а не свои попытки её решать.
...
Рейтинг: 0 / 0
07.03.2017, 10:19
    #39415233
tadeyiloda
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помощь с запросом
product это таблица товаров
product_page это таблица для страниц, на которых выводим товары на основе тегов
tag это теги их тут нет
product_tag таблица где продукту присваиваются теги
product_page_tag таблица где странице присваиваются теги
у продукта и страницы могут быть много тегов
изначально задача была такая- вывести на странице только те товары, у которых теги в точности совпадают с тегами страницы
например у страницы есть теги- красный и размер 34, значит выводим только товары у которых тоже есть теги красный и размер 34
а счас мне нужно получить количество таких товаров
...
Рейтинг: 0 / 0
07.03.2017, 10:42
    #39415264
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помощь с запросом
tadeyilodaнапример у страницы есть теги- красный и размер 34, значит выводим только товары у которых тоже есть теги красный и размер 34
А если у товара есть ещё и другие теги - считать? Количество тегов страницы, с которым надо сравнивать, всегда 2, или не фиксировано?
И хотелось бы видеть структуру необходимых для расчёта таблиц. Для устранения путаницы - с более подходящими по смыслу именами. А именно:

product - таблица товаров
page - таблица страниц
product_tag - таблица тегов продукта
page_tag - таблица тегов страницы
...
Рейтинг: 0 / 0
07.03.2017, 10:45
    #39415270
tadeyiloda
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помощь с запросом
если количество тегов разное то отсекаем, тегов может быть хоть 100 и у товара и у страницы
структура стандартная
product - таблица товаров id, name
page - таблица страниц id, name
product_tag - таблица тегов продукта product_id, tag_id
page_tag - таблица тегов страницы page_id, tag_id
...
Рейтинг: 0 / 0
07.03.2017, 11:29
    #39415327
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помощь с запросом
tadeyilodaесли количество тегов разное то отсекаемВы можете выражаться яснее? в оптимуме - абсолютно точно. Нужно полное совпадение наборов тегов - верно?

Со структурой понятно (хотя правильнее было дать DDL таблиц).

Как я понимаю, исходным параметром является ID страницы. Тогда я бы предложил следующее:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
SELECT COUNT(DISTINCT product_id)
FROM product_tag
GROUP BY product_id
HAVING GROUP_CONCAT(tag_id ORDER BY tag_id) = (
    SELECT GROUP_CONCAT(tag_id ORDER BY tag_id) p_tags
    FROM page_tag
    WHERE page_id = @page_id
    )
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / помощь с запросом / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]