У меня есть страница, которая динамически генерируется с использованием PHP и базы данных MySQL. На странице отображается информация о событии и перечислены даты запуска этого события.mysqli_fetch_array итерационная проблема
Моя база данных имеет следующие соответствующие таблицы:
events
- содержащие название события, стоимость т.д.,
venue
- содержащие информацию на месте проведения
instance
- содержащие event_id, venue_id, дату события в этом месте будет работать, и возможности для этого экземпляра.
registration
- содержащий экземпляр_и_и_ и посетитель_ee_id.
Чтобы захватить всю информацию на самом деле отображать информацию о событии, я использую следующий код:
$eid = $_GET['event_id'];
$q = "SELECT e.event_name, e.event_description, e.event_byline, e.event_benefit, e.event_cost, e.event_exam, e.event_resi, i.venue_id, i.instance_id, i.instance_cap, v.venue_name, DATE_FORMAT(i.instance_date, '%M %D, %Y') AS DATE
FROM events AS e
INNER JOIN instance AS i ON e.event_id = i.event_id
INNER JOIN venue AS v ON i.venue_id = v.venue_id
WHERE e.event_id = $eid
ORDER BY i.venue_id, i.instance_date";
$cur_venue = 0;
$r = @mysqli_query ($dbc,$q) or die(mysqli_error($dbc));
$row = mysqli_fetch_array($r, MYSQLI_ASSOC);
Теперь, что я хочу сделать, это отобразить список, отсортированный по месту, в случаях для соответствующее событие, которое я сделал до определенного момента. Тем не менее, то, что я также хочу сделать, - это только. Покажите экземпляр, если есть свободное место на этот конкретный экземпляр.
Поскольку я знаю, что емкость каждого экземпляра (из моего instance_cap
колонки), и я могу COUNT
количество участников, зарегистрированных в каждом конкретном случае, я полагаю, что я могу сделать это thuswise:
do
{
$list_instance = $row['instance_id'];
$qRegs = "SELECT COUNT(delegate_id) AS regs FROM registration
WHERE registration.instance_id = $list_instance";
$rRegs = mysqli_query($dbc,$qRegs);
$registrations = mysqli_fetch_object($rRegs);
$capacity = $row['instance_cap'];
$availability = $capacity - $registrations->regs;
if ($availability > 0){ //if event has places available...
if ($cur_venue != $row['venue_id']) //and if the current venue is not the same as the venue id
{
echo '<li id="'.$row['venue_name'].'">'
$cur_venue = $row['venue_id'];
echo '<h4>'.$row['venue_name'].'</h4>';//display the venue name
}
echo '<a href="#">'.$row['DATE'].'</a>' //display the date for current instance
echo '</li>';//close list tag
}
} while ($row = mysqli_fetch_array($r, MYSQLI_ASSOC));';
Проблема I что это пропустит первый экземпляр и проскакивает прямо ко второму. Я понимаю, что это, вероятно, связано с тем, что я дважды вызывал mysqli_fetch_array
, так как я могу работать так, чтобы этого не случилось?
Необходимо укрепить это в одном запросе и просто использовать результаты напрямую. –
@TiesonT. Я не вижу, как это сделать, учитывая, что есть несколько экземпляров каждого события. Я полный noob, хотя :) – ElendilTheTall
Я признаю, что SQL не является моим сильным пакетом, но попробуйте запустить обновленный запрос ниже в MySQL Workbench или phpMyAdmin и посмотреть, получился ли результат. –