- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу
Как снизить ДРР до 4,38% и повысить продажи с помощью VK Рекламы
Для интернет-магазина инженерных систем
Мария Лосева
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
Здравствуйте!
Есть две таблицы а и b.
Структура а:
id - идентификатор, adv - текст объявления.
Содержание а:
1, продам слона;
2, продам ослика.
Структура b:
id - идентификатор, adv_id - id объявления, date_up - дата поднятия объявления.
Содержание b:
1, 1, 1.1.2010;
2, 1, 2.2.2010;
3, 1, 3.3.2010;
Т.е. объявление id=1 было поднятно 3 раза, и последний раз поднималось 3 марта.
Нужно выбрать все объявления с последней датой поднятия.
Результат нужно вывести примерно такой:
adv_id, adv, date_up
1, продам слона, 3.3.2010
2, продам ослика, 0
ps делая обычный join, связка происходит не по нужной строке в таблице b, и, следовательно, в поле date_up не обязательно будет последняя дата.
SELECT a.id, a.adv, b.date_up FROM a LEFT JOIN b ON b.adv_id = a.id GROUP BY a.id ORDER BY b.date_up DESC выведет с теми, у кого нет даты поднятия
Я уже написал что нужно получить в итоге:
Результат нужно вывести примерно такой:
adv_id, adv, date_up
1, продам слона, 3.3.2010
2, продам ослика, 0
Без даты вывести записи не проблема. Нужно вывести ВСЕ объявления, но чтобы в поле date_up выводилась последняя дата поднятия объявления (если даты поднятия нет, то выводить в поле date_up ноль).
SELECT a.id, a.adv, IF(b.date_up,b.date_up,0) as date_up FROM a LEFT JOIN b ON b.adv_id = a.id GROUP BY a.id ORDER BY b.date_up DESC
GROUP BY a.id
тут будет получаться "о боже, что это?" :)))
тс это и спрашивает как этого избежать
Почему о боже что это?
Не поленился и сделал тест - работает как надо, учитывая что a.id - это b.adv_id конечно
SELECT a.text, b.date
FROM a
LEFT JOIN b ON a.id = b.a_id
GROUP BY a.id
ORDER BY b.date DESC
LIMIT 0 , 30
text date
c 2010-03-09 11:26:12
a 2010-03-09 11:24:32
b NULL
d NULL
Почему о боже что это?
потому что сначала делается группировка, а потом сортировка :)
поэтому даты будут в разброс а не как хочется :)
но в данной ситуации лечится просто
ORDER BY max(b.date_up)
order by 3 ;)
order by 3
уверен что сработает?
frantic, абсолютно)
order by 3
можно и так :)
просто я торопился