[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Избавление от запроса в цикле
blade
Имеется код


$sql_top3 = mysql_query("SELECT * FROM `users` ORDER BY `users`.`users_reit` DESC, `users`.`users_zabil` DESC, `users`.`users_propustil` DESC LIMIT $start, 25");
while( $top3 = mysql_fetch_assoc($sql_top3) )
{
$sql = mysql_query("SELECT * FROM results WHERE status = '1' AND (`home` = '".$top3["user"]."' OR `away` = '".$top3["user"]."') ORDER BY id DESC LIMIT 1");
}



Можно как то их объеденить ?
kaww
select * from results
left join users on results.home=users.user or results.away=users.user
where results.status = 1
order by results.id desc
group by
users.user
limit 1,25
blade

SELECT * FROM `results` AS `results` LEFT JOIN `users` AS `users` ON `results`.`home` = `users`.`users_name` OR `results`.`away` = `users`.`users_name`
WHERE `results`.`status` = '1'
ORDER BY `results`.`id` DESC
GROUP BY
`users`.`users_name` LIMIT 1, 25


ошибка

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'GROUP BY `users`.`users_name` LIMIT 1, 25' at line 4
kaww
Конечно будет ошибка, ведь нужно как-то так
SELECT * FROM `results` AS `results` LEFT JOIN `users` AS `users` ON `results`.`home` = `users`.`users_name` OR `results`.`away` = `users`.`users_name`
WHERE `results`.`status` = '1'
GROUP BY `users`.`users_name`
ORDER BY `results`.`id` DESC LIMIT 1, 25
blade
мне нужен список пользователей а не результатов

нужно как то так


SELECT * FROM `users` AS `users` LEFT JOIN `results` AS `results` ON `results`.`home` = `users`.`users_name` OR `results`.`away` = `users`.`users_name`
WHERE `results`.`status` = '1'
GROUP BY `users`.`users_name`
ORDER BY `users`.`users_reit` DESC, `users`.`users_zabil` DESC, `users`.`users_propustil` DESC DESC LIMIT 1, 25

но запрос выводит ошибку
Lenarfate
гугли в сторону left outer join. и естественно ошибка, зачем несколько раз повторять desc? одного достаточно в конце запроса перед limit
FatCat
Цитата (blade @ 18.12.2012 - 20:06)
как то их объеденить ?

ИМХО, лучше не объединить, а 2 запроса.
Первый запрос тот же, но в цикле собираешь массив юзеров, который подставляешь во второй запрос:
WHERE ... IN(".implode(",",$array).")


_____________
Бесплатному сыру в дырки не заглядывают...
blade
Цитата (FatCat @ 18.12.2012 - 17:53)
Цитата (blade @ 18.12.2012 - 20:06)
как то их объеденить ?

ИМХО, лучше не объединить, а 2 запроса.
Первый запрос тот же, но в цикле собираешь массив юзеров, который подставляешь во второй запрос:
WHERE ... IN(".implode(",",$array).")

В цикле выводится список пользователей а в нем нужны данные из второй таблицы.

Я не понял как все таки сделать
blade
Цитата (Lenarfate @ 18.12.2012 - 17:41)
гугли в сторону left outer join. и естественно ошибка, зачем несколько раз повторять desc? одного достаточно в конце запроса перед limit

LEFT OUTER JOIN не подходит, выводит не так список как обычный запрос на выборку пользователей с сортировкой
blade
С запросом вроде разобрался.


SELECT *
FROM `users` AS `users`
LEFT OUTER JOIN `results` AS `results` ON `results`.`home` = `users`.`users_name`
OR `results`.`away` = `users`.`users_name`
WHERE `results`.`status` = '1'
GROUP BY `users`.`users_name`
ORDER BY `users`.`users_reit` DESC , `users`.`users_zabil` DESC , `users`.`users_propustil` ASC
LIMIT
0 , 25


Как теперь сделать так чтобы из таблицы results вытягивалась только последняя запись с указанными условиями ?
neadekvat
Цитата (blade @ 18.12.2012 - 23:01)
Как теперь сделать так чтобы из таблицы results вытягивалась только последняя запись с указанными условиями ?

Если это надо добавить в тот запрос, что ты в том же посте показал, то просто допиши в WHERE и ORDER BY нужные условия.
FatCat
Цитата (blade @ 18.12.2012 - 22:49)
в нем нужны данные из второй таблицы

Сорри, не разобрался в твоей структуре таблиц.

_____________
Бесплатному сыру в дырки не заглядывают...
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.