2013-07-09 2 views
-1

Это футбольная система, где каждая игра, игрок и «журнал» для игры могут быть сохранены для статистики.Получить результат из двух розеток в двух разных таблицах mysql

  • "bold_players" таблица с игроком: номер, имя, возраст ...
  • "bold_playlog" представляет собой таблицу со всеми журналами для игр: ид, createdate, LOGTYPE, playerid ..
    «logtype = 1» - цель (только одна цель - каждая цель будет иметь один пост/идентификатор на столе «bold_playlog», поэтому, если в игре четыре цели, в «bold_playlog» будет четыре сообщения с тот же gameid).

Как я могу получить список со всеми игроками, заказанными голами?

Вот мой код прямо сейчас, но я думаю, что я должен соединить две таблицы или что-то вроде этого:?

$data_player = mysql_query("SELECT id, name, goals, playtogoal FROM bold_players ORDER BY name ASC "); 
while ($row_player = mysql_fetch_assoc($data_player)) { 

$seasonstart = mktime(0, 0, 0, 7, 1, date('Y')-1); 

$logplayer = $row_player['id']; 
$data_log = mysql_query("SELECT id, createdate, logtype FROM bold_playlog WHERE logplayer=$logplayer AND logtype = 1 AND createdate > $seasonstart "); 
$getresult = mysql_num_rows($data_log); 

if($getresult > 0) { 

echo 'the result'; 

}} 
+0

«упорядочено по воротам» ... ко времени первого гола, или по количеству голов или ...? –

+0

Извините! Количество целей. –

ответ

0

простой LEFT JOIN должен это сделать, это заказы большинство целей первого ш hich будет частью DESC, используйте ASC для наименьших целей.

SELECT a.*, COUNT(b.playerid) goals 
FROM bold_players a 
LEFT JOIN bold_log b 
    ON b.playerid = a.id 
AND b.logtype=1 
GROUP BY a.id, a.name, a.age 
ORDER BY COUNT(b.playerid) DESC 

An SQLfiddle to test with.

Если вам также нужно больше типов журналов, вам придется немного изменить запрос. Если offside является logtype 2, запрос будет;

SELECT a.*, 
    COALESCE(SUM(b.logtype=1), 0) goals, 
    COALESCE(SUM(b.logtype=2), 0) offsides 
FROM bold_players a 
LEFT JOIN bold_log b 
    ON b.playerid = a.id 
-- AND (b.logtype=1 OR b.logtype=2)  -- for speedup if there are many types 
GROUP BY a.id, a.name, a.age 
ORDER BY COALESCE(SUM(b.logtype=1), 0) DESC 

Another SQLfiddle.

+0

Спасибо, он отлично выглядит - и он работает. Что, если я также хочу получить счет «офсайд», также помещенный в 'bold_log'? (есть количество офсайдов для каждого игрока)? –

+0

@ LasseBoWamsler Обновлен ответ с новой информацией. –

+0

Отлично, спасибо - теперь это работает :) –

0

Может попробовать это .. Я думаю, это должно быть что-то вроде этого

SELECT name, goals, sum(playtogoal) as goals, createdate, logtype 
FROM bold_players as ps LEFT JOIN bold_playlog as pl ON ps.id=pl.logplayer 
WHERE pl.logtype = 1 AND pl.createdate > $saesonstart 
GROUP BY ps.id ORDER BY name ASC 

Я хотел бы сделать LEFT JOIN, так как там может быть игроки без цели, и они будут показаны слишком

Смежные вопросы