SQLinfo.ru - Все о MySQL Webew.ru: теория и практика веб-технологий

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 26.03.2017 20:52:31

SawyerCom
Участник
Зарегистрирован: 26.03.2017
Сообщений: 3

Объединить результаты двух запросов

Всем доброго времени суток!
В этой теме новичок, поэтому заранее извиняюсь, если что не так расписал.

Хочу сделать таблицу футбольного чемпионата.

В базе данных есть 2 таблицы:
- matchs - информация о всех матчах каждой команды. 1 строка - 1 матч. Ячейки: Команда #1, Команда #2, счет и #тура;
- teams - статистика каждой команды. Забито голов, пропущено, количество игр, побед, поражений и т.д.
Все данные, которые должны выводиться на странице, просчитывается и сохраняется в базе teams.

Чтобы получить эту информацию и вывести на странице, делаю следующее:


$select = "SELECT * FROM teams";
$result = mysqli_query($connect, $select);

while($row = mysqli_fetch_assoc($result)) {
echo "<tr><td>" . $j++ .
'</td><td style="text-align: left;">' . $row['name'] .
"</td><td>" . $row['games'] .
"</td><td>" . $row['wins'] .
"</td><td>" . $row['draw'] .
"</td><td>" . $row['loss'] .
"</td><td>" . $row['scored'] . ":" . $row['missed'] .
"</td><td>" . $row['points'] .
"</td><td>" . $row['winsTB15'] .
"</td><td>" . $row['winsTB2'] .
"</td></tr>";
}
 


Получается все то, что нужно. Пример http://f3.s.qip.ru/bDPkOgl5.png

Однако, кроме этого, в последний столбец необходимо выводить информацию (конкретно счет каждого из этих матчей) о последних пяти матчах каждого клуба, которые находятся в таблице matchs. Чтобы получить результаты последних матчей, делаю следующее:

$j = 0;
for($j = 0; $j < 24; $j = $j + 1) {
$lastMatchs = "SELECT * FROM matchs WHERE teamH = '$array[$j]' or teamg = '$array[$j]' ORDER BY `newid` DESC LIMIT 5";
$rLastMatchs = mysqli_query($connect, $lastMatchs);
while($aLastMatch = mysqli_fetch_assoc($rLastMatchs)) {
echo "<pre>" . $aLastMatch['teamH'] . $aLastMatch['score'] . $aLastMatch['teamG'] . "</pre>";
}
echo "<br>";
}
 


$array[$j] - это массив, в котором хранится название каждой команды.

Получается что-то типа http://f5.s.qip.ru/bDPkOgl6.png - в принципе все то, что и нужно.

А теперь вопрос: Как выводить информацию о последних 5 матчах в таблицу со статистикой? Ведь получается 2 разных цикла While. Реально слаб в этом деле и просто не знаю, куда посмотреть и что почитать. Думал как-то объединять результаты выборок, выбирая сразу две таблицы SELECT * FROM matchs, teams. Но таким образом получался огромный массив со всеми значения, а мне нужны только последние 5 по названию команды. Пример, что должно получиться http://f2.s.qip.ru/bDPkOgl7.png

Неактивен

 

#2 26.03.2017 21:27:31

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5218

Re: Объединить результаты двух запросов

SELECT t.*, (select group_concat(score) from matches where teamH = t.name or teamg = t.name ORDER BY `newid` DESC LIMIT 5) FROM teams t;

Неактивен

 

#3 26.03.2017 23:25:11

SawyerCom
Участник
Зарегистрирован: 26.03.2017
Сообщений: 3

Re: Объединить результаты двух запросов

Сделал так:


$res = "SELECT t.*, (select group_concat(score) from matchs where teamH = t.name or teamG = t.name ORDER BY `newid` DESC LIMIT 5) FROM teams t;";
$rLastMatchs = mysqli_query($connect, $res);
while($aLastMatch = mysqli_fetch_assoc($rLastMatchs)) {
echo "<pre>";
print_r($aLastMatch);
echo "</pre>";
}
 

Получилось так: http://f5.s.qip.ru/bDPkOgl9.png и далее уходит строка с результатами каждого матча этой команды.
Что именно не так? Почему отображаются все, а не 5 первых.
Спасибо

Неактивен

 

#4 26.03.2017 23:42:00

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5218

Re: Объединить результаты двух запросов

SELECT t.*, (select group_concat(select score from matches where teamH = t.name or teamg = t.name ORDER BY `newid` DESC LIMIT 5)) FROM teams t;

Неактивен

 

#5 27.03.2017 09:14:09

SawyerCom
Участник
Зарегистрирован: 26.03.2017
Сообщений: 3

Re: Объединить результаты двух запросов

Warning: mysqli_fetch_assoc() expects parameter 1 to be mysqli_result, boolean given in ...

В строке:
while($aLastMatch = mysqli_fetch_assoc($rLastMatchs)) {

Код:

$res = "SELECT t.*, (select group_concat(select score from matchs where teamH = t.name or teamG = t.name ORDER BY `newid` DESC LIMIT 5)) FROM teams t;";
$rLastMatchs = mysqli_query($connect, $res);
while($aLastMatch = mysqli_fetch_assoc($rLastMatchs)) {
 

Неактивен

 

#6 27.03.2017 10:54:18

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5218

Re: Объединить результаты двух запросов

сделайте пример с тестовыми данными в виде
create table ..
insert into ..

можно на sqlfiddle.com

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson