PHP: циклы while, как это сделать - PullRequest
0 голосов
/ 21 февраля 2011

Я хочу сделать «Предыдущие события: ....», где он захватывает события с датой, предшествующей текущей () WHERE date < unix_timestamp(NOW()), и Предстоящие события: где он захватывает события, которые имеют более позднюю, чем текущая date > unix_timestamp(NOW())

Я дошел до этого:

$grabEvents = $connect->prepare("SELECT eID FROM discos_events_guests WHERE uID =:user");
$grabEvents->bindValue(":user", $profile_id);
$grabEvents->execute();
if($grabEvents->rowCount()>0){
echo "<strong>Previous events:</strong><br>";
    while($event = $grabEvents->fetch()){
    $eID = $event["eID"];
    $grabEvent = $connect->prepare("SELECT title FROM discos_events WHERE id=:eid AND date < unix_timestamp(NOW())");
    $grabEvent->bindValue(":eid", $eID);
    $grabEvent->execute();
    $grabEvent = $grabEvent->fetch();
    echo $grabEvent["title"]."<br>";
    }
}

Работает просто отлично, и хорошо захватывает предыдущие события. Как мне тогда захватить Предстоящие события в этом коде? Я попытался сделать еще один запрос за это время, но он все испортил, потому что он проверяет два и да, не получилось так, как я хочу.

Как я могу это сделать?

Ответы [ 2 ]

2 голосов
/ 21 февраля 2011

Для начала вам нужно оптимизировать свой запрос, а не повторять запросы в цикле while, сделайте это вместо:

SELECT deg.eID, de.title
FROM discos_events_guests deg
JOIN discos_events de on de.id = deg.eID
WHERE uID =:user
  AND date < unix_timestamp(NOW())

Например, чтобы получить предыдущее, вы должны сделать:

$grabEvents = $connect->prepare("SELECT de.title
    FROM discos_events_guests deg
    JOIN discos_events de on de.id = deg.eID
    WHERE uID =:user
      AND date < unix_timestamp(NOW())");
$grabEvents->bindValue(":user", $profile_id);
$grabEvents->execute();
if($grabEvents->rowCount()>0){
    while($event = $grabEvents->fetch()){
        echo $event["title"]."<br>";
    }
}

Затем просто повторите то же самое для следующего запроса:

$grabEvents = $connect->prepare("SELECT de.title
    FROM discos_events_guests deg
    JOIN discos_events de on de.id = deg.eID
    WHERE uID =:user
      AND date > unix_timestamp(NOW())");
$grabEvents->bindValue(":user", $profile_id);
$grabEvents->execute();
if($grabEvents->rowCount()>0){
    while($event = $grabEvents->fetch()){
        echo $event["title"]."<br>";
    }
}
1 голос
/ 21 февраля 2011

Я бы, вероятно, просто запустил еще один цикл, например:

$grabEvents = $connect->prepare("SELECT eID FROM discos_events_guests WHERE uID =:user");
$grabEvents->bindValue(":user", $profile_id);
$grabEvents->execute();
if($grabEvents->rowCount()>0){
echo "<strong>Previous events:</strong><br>";
    while($event = $grabEvents->fetch()){
    $eID = $event["eID"];
    $grabEvent = $connect->prepare("SELECT title FROM discos_events WHERE id=:eid AND date < unix_timestamp(NOW())");
    $grabEvent->bindValue(":eid", $eID);
    $grabEvent->execute();
    $grabEvent = $grabEvent->fetch();
    echo $grabEvent["title"]."<br>";
    }

echo "<strong>Upcoming Events:</strong><br>";
    while($event = $grabEvents->fetch()){
    $eID = $event["eID"];
    $grabEvent = $connect->prepare("SELECT title FROM discos_events WHERE id=:eid AND date > unix_timestamp(NOW())");
    $grabEvent->bindValue(":eid", $eID);
    $grabEvent->execute();
    $grabEvent = $grabEvent->fetch();
    echo $grabEvent["title"]."<br>";
    }
}

По крайней мере, если я правильно понимаю ваш вопрос.

...