2012-06-18 6 views
-1

Я пересматриваю это, поскольку я работаю на другой странице, где хочу использовать ту же концепцию. This page показывает результат, который я получаю с моего сервера MSSQL.PHP SQL Combine Records In Foreach()

У меня есть таблица информации о месте проведения (имя, адрес и т. Д.), В котором происходят наши события. Отдельно у меня есть таблица фактических событий, которые запланированы (событие может происходить несколько раз за один день и/или в течение нескольких дней). Я присоединяюсь к этим таблицам с запросом (как видно ниже).

<?php 
try { 
    $dbh = new PDO("sqlsrv:Server=localhost;Database=Sermons", "", ""); 
    $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
    $sql = "SELECT TOP (100) PERCENT dbo.TblSermon.Day, dbo.TblSermon.Date, dbo.TblSermon.Time, dbo.TblSermon.Speaker, dbo.TblSermon.Series, dbo.TblSermon.Sarasota, dbo.TblSermon.NonFlc, dbo.TblJoinSermonLocation.MeetingName, dbo.TblLocation.Location, dbo.TblLocation.Pastors, dbo.TblLocation.Address, dbo.TblLocation.City, dbo.TblLocation.State, dbo.TblLocation.Zip, dbo.TblLocation.Country, dbo.TblLocation.Phone, dbo.TblLocation.Email, dbo.TblLocation.WebAddress 
     FROM dbo.TblLocation RIGHT OUTER JOIN dbo.TblJoinSermonLocation ON dbo.TblLocation.ID = dbo.TblJoinSermonLocation.Location RIGHT OUTER JOIN dbo.TblSermon ON dbo.TblJoinSermonLocation.Sermon = dbo.TblSermon.ID 
     WHERE (dbo.TblSermon.Date >= { fn NOW() }) 
     ORDER BY dbo.TblSermon.Date, dbo.TblSermon.Time"; 
    $stmt = $dbh->prepare($sql); 
    $stmt->execute(); 
    $stmt->setFetchMode(PDO::FETCH_ASSOC); 
    foreach ($stmt as $row) { 
     echo "<pre>"; 
     print_r($row); 
     echo "</pre>"; 
    } 
    unset($row); 
    $dbh = null; 
} 
catch(PDOException $e) { 
    echo $e->getMessage(); 
} 
?> 

Таким образом, по мере прохождения результатов запроса он создает массив для каждой записи.

Array 
(
    [Day] => Tuesday 
    [Date] => 2012-10-30 00:00:00.000 
    [Time] => 07:00 PM 
    [Speaker] => Keith Moore 
    [Location] => The Ark Church 
    [Pastors] => Alan & Joy Clayton 
    [Address] => 450 Humble Tank Rd. 
    [City] => Conroe 
    [State] => TX 
    [Zip] => 77305.0 
    [Phone] => (936) 756-1988 
    [Email] => [email protected] 
    [WebAddress] => http://www.thearkchurch.org 
) 
Array 
(
    [Day] => Wednesday 
    [Date] => 2012-10-31 00:00:00.000 
    [Time] => 07:00 PM 
    [Speaker] => Keith Moore 
    [Location] => The Ark Church 
    [Pastors] => Alan & Joy Clayton 
    [Address] => 450 Humble Tank Rd. 
    [City] => Conroe 
    [State] => TX 
    [Zip] => 77305.0 
    [Phone] => (936) 756-1988 
    [Email] => [email protected] 
    [WebAddress] => http://www.thearkchurch.org 
) 
Array 
(
    [Day] => Tuesday 
    [Date] => 2012-11-06 00:00:00.000 
    [Time] => 07:00 PM 
    [Speaker] => Keith Moore 
    [Location] => Fellowship Of Faith Christian Center 
    [Pastors] => Michael & Joan Kalstrup 
    [Address] => 18999 Hwy. 59 
    [City] => Oakland 
    [State] => IA 
    [Zip] => 51560.0 
    [Phone] => (712) 482-3455 
    [Email] => [email protected] 
    [WebAddress] => http://www.fellowshipoffaith.cc 
) 
Array 
(
    [Day] => Wednesday 
    [Date] => 2012-11-14 00:00:00.000 
    [Time] => 07:00 PM 
    [Speaker] => Keith Moore 
    [Location] => Faith Family Church 
    [Pastors] => Michael & Barbara Cameneti 
    [Address] => 8200 Freedom Ave NW 
    [City] => Canton 
    [State] => OH 
    [Zip] => 44720.0 
    [Phone] => (330) 492-0925 
    [Email] => 
    [WebAddress] => http://www.myfaithfamily.com 
) 

Что я хотел сделать, это объединить эти массивы, в некотором роде, так что место информация не повторяется каждый раз, но каждая дата/время шоу.

Я попытался напечатать его в стиле массива, но не смог найти подходящую многомерность для него. Я просто вставляю, как бы мне хотелось, чтобы он отображался, потому что так оно и будет.

The Ark Church 
    Contact: 
     Alan & Joy Clayton 
     450 Humble Tank Rd. 
     Conroe, TX 77305 
     (936) 756-1988 
     [email protected] 
     http://www.thearkchurch.org 
    Meetings: 
     Tuesday, 2012-10-30 07:00 PM 
     Wednesday, 2012-10-31 07:00 PM 

Fellowship Of Faith Christian Center 
    Contact: 
     Michael & Joan Kalstrup 
     18999 Hwy. 59 
     Oakland, IA 51560 
     (712) 482-3455 
     [email protected] 
     http://www.fellowshipoffaith.cc 
    Meetings: 
     Tuesday, 2012-11-06 07:00 PM 

Faith Family Church 
    Contact: 
     Michael & Barbara Cameneti 
     8200 Freedom Ave NW 
     Canton, OH 44720 
     (330) 492-0925 
     http://www.myfaithfamily.com 
    Meetings: 
     Wednesday, 2012-11-14 07:00 PM 

Не обязательно заканчивать так, но это должно дать хорошее представление о том, что я ищу.

У меня не обязательно есть, чтобы создать новый массив. Я просто хочу, чтобы не показывать ту же информацию снова и снова.

Я думал, что я мог бы просто сделать какую-то форму сравнения, в foreach(), которая говорит что-то вроде строк «если местоположение такое же, как и предыдущее местоположение», но я не понял, как это сделать (есть ли способ кэширования предыдущей переменной с выполнением $location1 = [Location], $location2 = [Location] и т.д ...?

Одна вещь, чтобы отметить ...

Эти примеры не имеют различные акустические системы, но иногда есть. Я бы как бы получить доступ к динамику. Я предполагаю, что я хотел бы, чтобы он привязался к реальному событию.

JJ

+1

Покажите нам свою петлю PHP? – Blazemonger

+0

Показать свой код .. –

+0

Без кода и, возможно, схемы базы данных, все просто догадываются – jpiasetz

ответ

0

Один метод: если у вас есть цикл, как это:

while ($row = $query->fetch(PDO::FETCH_NUM)) { 
    list($time,$place,$etc) = $row; 
    // display formatted data 
} 

попробуйте вместо этого:

$row = $query->fetch(); 
do { 
    list($time,$place,$etc) = $row; 
    $row = $query->fetch(PDO::FETCH_NUM); 
    if ($time != $row[0] && $place != $row[1] && $etc != $row[2]) { 
     // display formatted data 
    } 
} while ($row); 
+0

Я пытаюсь взломать это, и я либо потерян, либо мы не на одной странице. Я получаю его туда, где он будет показывать только 1 запись для каждого события ('if ($ meeting! = $ Row [7])'). То, что я хочу, - показать информацию о событии один раз, но все даты, связанные с этим событием (как в части «Я просто хочу ...» моего исходного сообщения). Являются ли результаты, что я получаю то, что, по вашему мнению, произойдет, или я что-то неправильно делаю? Я не хочу пропустить свой полный код в этом маленьком комментарии. – doubleJ

0

я обычно подходил к проблеме, как это, создав два-dimensinoal массив, индексированный по дате, затем идентификатор или в вашем случае по идентификатору, а затем по дате.

Прокрутите события (первое измерение) и распечатайте содержимое этого события - в то время как в нем прокручиваются даты этого события и распечатываются в виде списка, как в вашем примере.

+0

Итак, в этом случае первым измерением будет место, а вторым измерением будут даты? Это интересная мысль. – doubleJ