В настоящее время я использую этот SQL-код в приложении PHP, и мне нужно преобразовать его в MS Access.
Мне нужно выполнить второй запрос для каждого результата с первого, чтобы в конечном итоге было подсчитано количество гонщиков в каждом. Гонка Всадник в первой гонке побежал. (соревнования по мотогонкам)
Довольно просто с PHP (я могу предоставить полный код для этого при необходимости)
Не совсем уверен, как начать с Access. (оба запроса отлично работают в Access, но я не могу присоединиться к ним так, как мне нужно)
Запрос 1:
SELECT schedule2.Date, riders.ridername, results.finish, results.points, classes.class, seasons.season
FROM schedule2 RIGHT JOIN (classes RIGHT JOIN ((riders RIGHT JOIN results ON riders.id = results.rider_id) LEFT JOIN seasons ON results.season_id = seasons.id) ON classes.id = results.class_id) ON schedule2.id = results.schedule_id
GROUP BY schedule2.Date, riders.ridername, results.finish, results.points, classes.class, seasons.season, schedule2.id, results.class_id, riders.id
HAVING (((riders.id)=[:id]))
ORDER BY schedule2.Date;
Запрос 2:
SELECT DISTINCT Count(results.rider_id) AS CountOfrider_id
FROM seasons RIGHT JOIN (results LEFT JOIN schedule2 ON results.schedule_id = schedule2.id) ON seasons.id = schedule2.season_id
GROUP BY schedule2.id, results.class_id
HAVING (((schedule2.id)=[:scheduleId]) AND ((results.class_id)=[:classId]));
текущее приложение PHP создает этот набор результатов: (идентификатор райдера выбирается с помощью формы)
![enter image description here](https://i.stack.imgur.com/JxCbG.png)
Оригинальный PHP (для справки)
$getRiderInfo = $dbh->prepare('
SELECT riders.ridername,
schedule2.date,
schedule2.id AS scheduleId,
results.class_id AS classId,
results.finish,
results.points,
classes.class,
seasons.season,
riders.id
FROM schedule2
RIGHT JOIN (classes
RIGHT JOIN ((riders
RIGHT JOIN results
ON riders.id = results.rider_id)
LEFT JOIN seasons
ON results.season_id = seasons.id)
ON classes.id = results.class_id)
ON schedule2.id = results.schedule_id
GROUP BY riders.ridername,
schedule2.date,
classes.class,
seasons.season
HAVING (((riders.id)=:id))
ORDER BY schedule2.date ASC;
');
$getRiderInfo->bindValue('id', $racer_id);
if ($getRiderInfo->execute()) {
while ($iRows = $getRiderInfo->fetch(PDO::FETCH_ASSOC)) {
$getCounts = $dbh->prepare('
SELECT DISTINCT COUNT(results.rider_id) AS CountOfrider_id,
schedule2.id,
results.class_id
FROM seasons
RIGHT JOIN(results
LEFT JOIN schedule2
ON results.schedule_id = schedule2.id)
ON seasons.id = schedule2.season_id
GROUP BY schedule2.id ,
results.class_id
HAVING (((schedule2.id) = :scheduleId)
AND ((results.class_id) = :classId));
');
$getCounts->bindValue('scheduleId', $iRows['scheduleId']);
$getCounts->bindValue('classId', $iRows['classId']);
if ($getCounts->execute()) {
while ($iRows1 = $getCounts->fetch(PDO::FETCH_ASSOC)) {
$iCount = $iRows1['CountOfrider_id'];
}
}
$iDate = date_create($iRows['date']);
echo '<tr><td>' . $iRows['ridername'] . '</td>';
echo '<td>' . date_format($iDate, 'm/d/Y') . '</td>';
echo '<td>' . $iRows['finish'] . '</td>';
echo '<td>' . $iRows['points'] . '</td>';
echo '<td>' . $iRows['class'] . '</td>';
echo '<td>' . $iRows['season'] . '</td>';
echo '<td>' . $iCount . '</td></tr>';
}
}