Задавайте вопросы, мы ответим
Вы не зашли.
Страниц: 1
Всем привет!
Не могу сам найти решение так вот задачи
Имеется таблица
id type value
1 a val2
2 a val2
3 b val
4 c val2
5 c val
6 d val2
Делаю выборку
Отредактированно tazododu (03.12.2010 11:09:09)
Неактивен
А чем Вас не устраивает убрать LIMIT 2 из первого запроса?
Неактивен
Хм... Противоречите сами себе.
"Получить кол-во всех уникальных строк(a[2шт]+с[1шт]+d[1шт]) удовлетворяющих условию из первого запроса."
и
"постраничная навигация" (т.е. получит' тол'ко N записей)
Если вариант первый - долой LIMIT
Если второй - да здравствует LIMIT
А то и рыбку с'ест' и ...(забыл)
Неактивен
Знаете, упрощенный вариант мне нравится больше
Я правильно понимаю, что в результате Вы хотите получить одно число
2 + 1 + 1 = 4? В этом случае оно (в упрощенном варианте) будет просто
SELECT COUNT(*) FROM tbl WHERE value = 'val2'.
Если нужны количества по типам, то таки просто убрать LIMIT.
Неактивен
Задача такая - есть поиск, выбирает товары поставщиков, группирую по поставщикам и ведя подсчет сгруппированных товаров.
Например ищем кирпич
1. Фирма Такаята товаров удовлетворяющих условиям столько-то
2. Фирма Такаята товаров удовлетворяющих условиям столько-то
Т.к. была группировка по фирмам следовательно SELECT FOUND_ROWS() отдаст мне кол-во фирм(и кол-во товаров для каждой фирмы). Конечно, если бы не было лимита можно было бы просто сложить все кол-ва товаров для всех фирм.
Нужно сделать такой же поиск как тут http://prom.ua/search?search_scope=prod … 1%82%D0%B8
Prom.ua›Товары и услуги› Результаты по запросу «Кирпич» (8374 наименований от 1214 поставщиков)
неужели это нельзя сделать одним запросом? как же они сделали так? ночами не сплю голову ломаю))
Неактивен
А почему Вы считаете, что они это сделали одним запросом?
Хотя, конечно, они читеры, и сделали одним:
SELECT COUNT(*) AS items, COUNT(DISTINCT `supplier`) AS suppliers FROM items WHERE MATCH(name) AGAINST ('кирпич');
Неактивен
Так пока и не нашел решения этой задачи, применительно к своему запросу, и решил пока не выводит на сайте общее число найденных товаров, мож ближе к новому году придет озарение
Но столкнулся с другой подлой особенностью GROUP BY ...
Необходимо выбрать товары сгруппировав по производителю с условием, что при группировке должен показываться последний отредактированный товар и все отсортировано по дате редактирования.
Написал вот такую вот кверюху
Отредактированно tazododu (09.12.2010 11:37:21)
Неактивен
При использовании группировки необходимо выбирать только те столбцы, по которым идет группировка, или, для которых используется группирующая функция. Это стандарт SQL.
MySQL разрешает не соблюдать это правило (не выдает ошибку синтаксиса), но в группировке для тех столбцов, которые не входят в группировку (или не используются с группирующей функцией) выдает произвольную строку.
Вместо
Неактивен
Так пока и не нашел решения этой задачи, применительно к своему запросу, и решил пока не выводит на сайте общее число найденных товаров, мож ближе к новому году придет озарение
А почему бы на уровне языка программирования при обработке данных не суммировать всё полученное? Ведь всё равно в каком-то цикле все данные проходите
А для запроса всё же подзапрос надо бы использовать, ИМХО. Детали щас не подскажу, долго думать)))
upd.
Ой, не успел поумничать))
Отредактированно Neval (09.12.2010 12:05:49)
Неактивен
Neval
Так пока и не нашел решения этой задачи, применительно к своему запросу, и решил пока не выводит на сайте общее число найденных товаров, мож ближе к новому году придет озарение
А почему бы на уровне языка программирования при обработке данных не суммировать всё полученное? Ведь всё равно в каком-то цикле все данные проходите
---
та я бы с радостью, абы не LIMIT
vasya
нужно
Отредактированно tazododu (09.12.2010 13:26:47)
Неактивен
tazododu написал:
vasya
нужно
SELECT g.* FROM goods g JOIN (SELECT (MAX(`goods`.`last_edit`)) as last_edit GROUP BY `idcompany`) t using(`idcompany`,last_edit);
---
Этой записью вы вообще меня запутали
Кверя не выполняется. Как это в подзапросеSELECT (MAX(`goods`.`last_edit`)) as last_edit GROUP BY `idcompany`нет FROM?
Забыл Естественно нужен.
tazododu написал:
Что за g перед джойном когда потом написано t..... я в замешательстве
У вас ведь 2 таблицы, одна goods g, вторая подзапрос.
Но в данном случае можно просто * написать.
Неактивен
tazododu написал:
та я бы с радостью, абы не LIMIT
Ну тогда отдельный запрос
tazododu написал:
Как это в подзапросе
SELECT (MAX(`goods`.`last_edit`)) as last_edit GROUP BY `idcompany`нет FROM?
Это синтаксис из MySQL 10
Отредактированно Neval (09.12.2010 13:40:37)
Неактивен
Да, и в подзапросе по идее ещё надо `idcompany` селектить
Неактивен
Точно.
Надо отдохнуть, а то я простой запрос уже который раз неправильно пишу.
Неактивен
ТОВАРИЩИ!!!
Спасиб за помощь с GROUP BY!! Этот способ очень помог! Сейчас вот нужно как-то будет запросы и БД свои оптимизировать то медленнее стали выборки сразу
Возник вопрос, а зачем в USING(`idcompany`,`last_edit`) аж 2 параметра?
Сделал с одним ON (`goods`.`idcompany` = `t`.`idcompany`). Работает правильно....вроде
Отредактированно tazododu (10.12.2010 17:19:17)
Неактивен
tazododu написал:
Возник вопрос, а зачем в USING(`idcompany`,`last_edit`) аж 2 параметра?
Сделал с одним ON (`goods`.`idcompany` = `t`.`idcompany`). Работает правильно....вроде
Неактивен
Да, наглядно! Чую как от общения с вами прокачиваюсь в мускуле
Неактивен
Страниц: 1