//compilim.ru/forum.php вот тут на форуме чтобы вывести список тем я использую запрос
————————————————————————
SELECT qf.*, author.name, author.lastname, last.name, last.lastname
FROM forums AS qf
LEFT JOIN users AS author ON qf.uid = author.id
LEFT JOIN users AS last ON qf.last_user = last.id
ORDER BY last_data DESC
который вытаскивает ВСЕ темы, присоеденяет к каждой имя автора и последнего комментатора
вывожу все это дело
————————————————————————-
for($i = 1; $i < $countProg+1; $i++)
{
$addBlock .= echoForumLang($i, $myCount[$i]);
foreach($rows as $row)
{
if($row['mid'] == $i and $k++ < 2)
{
if(!$row['mini']) !$row['mini'] = 'Нет описания';
$addBlock .=echoForumTheme($row);
}
} $k = 0;
}
—————————————————————————
в цикле по всем языкам я создаю блоки…
–
$addBlock – содержит блок текущего языка (синяя полоска)
иechoForumTheme($row) – саму тему
–
$row['mid'] – содержит идентификатор языка
Проблема в том что я из базы достаю все записи форумов! А внадо только к каждому языку по 2 последние темы!
Кто может помочь?
21 августа 2009 в 20:05
соглашусь с лютым евгением что один сложный запрос лучше много маленьких, но на порядках более 100 я думаю.
в твоем случае реально это все и в один запрос забить, а не в 40
21 августа 2009 в 16:02
запрос в цикле – отстой, лучше сделать один сложный запрос чем 40 простых
21 августа 2009 в 16:00
Спасибо огромное будем разбирать! А если сделать запрос в цикле(самый простой вариант)- 40 запросов (это не слишком много) ?
21 августа 2009 в 15:03
SELECT DISTINCT
f.mid, — ID языка
CASE
WHEN rec_indexes.rec_idx=0 THEN — если нужно достать последнюю запись
(SELECT f1.id FROM formus f1 WHERE f1.mid=f.mid ORDER BY f1.last_data DESC LIMIT 0, 1)
WHEN rec_indexes.rec_idx=1 THEN — если нужно достать предпоследнюю запись
(SELECT f1.id FROM formus f1 WHERE f1.mid=f.mid ORDER BY f1.last_data DESC LIMIT 1, 1)
END AS latest_record_id
FROM forums f,
(SELECT 0 AS rec_idx UNION SELECT 1) rec_indexes — табличка для того, чтобы для каждого языка можно было иметь 2 записи в результате
– что-то типа такого
21 августа 2009 в 15:03
блин, контакт все пробелы вначале строк поудалал, некрасиво получилось
21 августа 2009 в 15:03
ну это айдишники достаются, можно сджоинить forums с результатами этого запроса и выбрать все поля
21 августа 2009 в 15:01
можно пример?
21 августа 2009 в 15:01
Языки в массиве – удобнее тем что лишний раз не надо делать запрос=)
21 августа 2009 в 15:01
Можешь запрос сделать при старте приложения, заполнить кэш языков и пользоваться им в дальнейшем. Просто иметь языки в базе удобнее для написания различных запросов. Пример – чуть позже будет
21 августа 2009 в 15:00
Нужно, чтобы языки были в таблице отдельной. Это, во-первых, гораздо правильнее с точки зрения здравого смысла А во-вторых, в таком случае можно будет сделать запрос для таблицы languages (или как ты ее назовешь) и для каждого языка сделать подзапрос, возвращающий нужную тебе информацию. Можно это сделать и без отдельной таблицы, например сделать SELECT DISTINCT по полю mid, чтобы выбрать все языки, по которым есть записи, и сделать подзапросы для каждого mid.
21 августа 2009 в 14:05
Можно конешно в цикле сделать запрос, но 40 запросов…
21 августа 2009 в 14:04
$lang_prog = array('1'=>'Assembler','2'=>'HTML', '3'=>'JavaS?1?ript','4'=>'VBScript', '5'=>'CSS','6'=>'FLASH','7'=>'PERL','9'=>'Delphi','8'=>'PHP'
,'10'=>'Pascal','11'=>'MySQL','12'=>'SSI','13'=>'VRML','14'=>'ColdFusion', '15'=>'TurboPascal','16'=>'KOBOL',
'17'=>'C', '18'=>'Lua', '19'=>'MATLAB','20'=>'MAPLE', '21'=>'C++','22'=>'C#','23'=>'Java','24'=>'Python',
'25'=>'RUBY', '26'=>'Vala', '27'=>'VisualBasic','28'=>'MSSQL', '29'=>'PostregeSQL','30'=>'ASP, ASP.NET', '31'=>'OBERON', '32'=>'CGI',
'33'=>'ActionScript','34'=>'XML', '35'=>'AJAX', '36'=>'SAS', '37'=>'D', '38'=>'ADA', '39'=>'Visual FoxPro','40'=>'C++/CLI',);
языки в массиве
структура базы форума
id | title | mini | mid | uid | numm | last_data | last_user| send
————————————————————————
идентификатор
заголовок
краткое описание
к какому языку относится
кто создал форум
количество сообщений
последнее обнавление
последний пользователь
- не помню – =)
21 августа 2009 в 14:02
А структуру базы привести? Хотя бы таблицу forums и таблицу, в которой все языки содержатся