- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу
Все что нужно знать о DDоS-атаках грамотному менеджеру
И как реагировать на "пожар", когда неизвестно, где хранятся "огнетушители
Антон Никонов
VK приобрела 70% в структуре компании-разработчика red_mad_robot
Которая участвовала в создании RuStore
Оксана Мамчуева
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
Есть таблица разделов, есть таблица статей в разделе.
Нужно выбрать из каждого раздела по 10 последний статей, естественно с названием статей.
Самый примитивный способ это
1.SELECT cat_name, cat_id FROM cat
2. и потом в итерации делать SELECT * FROM article WHERE cat_id = $cat_id LIMIT 10
Но не хотелось бы плодить кучу, пусть не так много п2., хоть данные и кешируются в файл.
Подскажите пожалуста как сделать грамотней?!
Спасибо.
select article.*
from article
left join cat on article.cat_id=cat.cat_id
чукча хитрый какой :)
это обычный запрос выборки.
а выбери-ка по 10 с каждой категории.
Пока писал ответ, уже и ТЗ поменялось. :(
все же проще пробегать по категориям...
Нужно выбрать из каждого раздела по 10 последний статей,
это было изначально.
попробуй так
SELECT t_n.*
FROM table_category AS t_c
LEFT JOIN table_news AS t_n
ON t_c.id=t_n.category_id
GROUP BY t_c.id, t_n.id
ORDER BY t_n.time DESC
LIMIT 10
я попробую, но мне кажется что это запрос выведет всего 10 записей
Miracle добавил 19.08.2010 в 10:44
выведет всего 10 записей
как я и говорил, причем, запрос сложнее чем написал чукча, а по идее выведет тоже самое.
set @category_id = 0;
set @n = 0;
SELECT *, @n:=if(@category_id <> category_id, 1, @n:=@n+1), @category_id:=category_id FROM `test`
WHERE @n <= 10;
Хотя правильнее, наверное, будет вот так:
set @category_id = 0;
set @n = 0;
SELECT *, @n:=if(@category_id <> category_id, 1, @n:=@n+1), @category_id:=category_id FROM `test` WHERE 1
having @n <= 10
order by category_id
Важно: такой запрос отберет не 10 последних статей в разделе, а 10 статей с "наименьшими" тайтлами. Чтобы отбирать именно 10 последних статей, вам нужно во вложенном запросе в ORDER BY вместо title (выделено красным) использовать соответствующее поле даты (или инкрементный айдишник) статьи и явное указание порядка сортировки.
спасибо., с @ еще запросов не писал сейчас буду пробовать.
а 10 статей с "наименьшими" тайтлами
я думаю это просто опечатка.
select article.*, cat.* from article, cat
where cat.cat_id in (select c.cat_id from cat c where article.cat_id=c.cat_id order by 1 limit 10)