MySQL, PHP и табличные данные - PullRequest
1 голос
/ 05 марта 2012

У меня есть полусложная (не совсем, но и не самая простая) структура базы данных:

appointments = id, teacher_id, child_id, slot

child = id, parent_id, name, form

parent = id, name, contact_details

teacher = id, name, subject

slot = id, time

В результате я использовал несколько множественных объединений SELECTоператоры для извлечения данных, которые мне нужны, такие как:

SELECT
 DISTINCT ( ( c.id +150 ) *1055 ) AS reference_number,
 p.name AS parent_name,
 c.name AS child_name,
 c.form AS child_form
FROM appointments AS a
INNER JOIN child AS c ON a.child_id = c.id
INNER JOIN parent AS p ON c.parent_id = p.id

Я хотел бы создать таблицу, в которой slots - одна ось, а teachers - другая ось, симя ребенка, зарегистрированного для этого учителя в этом временном интервале, в качестве фактических данных.

Таблица slot выглядит следующим образом:

SQL query: SELECT * FROM `slots` LIMIT 0, 30 ; 
Rows: 30

id  time
1   2012-03-15 16:00:00
2   2012-03-15 16:05:00
3   2012-03-15 16:10:00
4   2012-03-15 16:15:00
5   2012-03-15 16:20:00
6   2012-03-15 16:25:00
7   2012-03-15 16:30:00
8   2012-03-15 16:35:00
9   2012-03-15 16:40:00
10  2012-03-15 16:45:00
11  2012-03-15 16:50:00
12  2012-03-15 16:55:00
13  2012-03-15 17:00:00
14  2012-03-15 17:05:00
15  2012-03-15 17:10:00
16  2012-03-15 17:15:00
17  2012-03-15 17:20:00
18  2012-03-15 17:25:00

Таблица appointments выглядит следующим образомпосле нескольких записей:

id  teacher_id  child_id    slot
1   1   1   3
2   2   1   5
3   1   3   2
4   2   3   6
5   1   4   4
6   2   4   7
7   1   5   1
8   2   5   9
9   1   6   8
10  2   6   3

Я пытался собрать что-то вместе, используя PHP, но это действительно ранило мою голову!

Может кто-нибудь порекомендовать решение, без использования внешних скриптов ?


РЕДАКТИРОВАТЬ согласно требованиюВот небольшой скриншот того, чего я пытаюсь достичь.Я сделал это в Excel, но, очевидно, что по теме, я хочу это в PHP / HTML.

Tabular Data?


Заранее спасибо,

1 Ответ

1 голос
/ 05 марта 2012

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

$appointments =

ВЫБРАТЬ DISTINCT ((c.id +150) * 1055) AS reference_number, p.name AS parent_name, c.name AS child_name, c.form AS child_form, Назначение А.С., a.slot AS slotid ОТ назначений КАК ВНУТРЕННИЙ ПРИСОЕДИНЯТЬСЯ ДЕТЯМ КАК ВКЛ ВНУТРЕННЕЕ СОЕДИНЕНИЕ родительский как p ВКЛ c.parent_id = p.id

$teachers = ВЫБЕРИТЕ id, учитель ОТ учителей

$slots = SELECT id, время ОТ слотов

Получите их в ассоциативные массивы, чтобы у вас было $appointments $teachers $slots (вы можете добавить код для этого)

<?php

// simply add a blank child element to each slot
foreach($slots as $slotKey => $slot)
{
    $slots[$slotKey]['child'] = '';
}

// now add the full empty slot list to all teachers
foreach($teachers as $key => $teacher)
{
    $teachers[$key]['appointments'] = $slots;
}

// now to fill in the child names into the teachers slots where they have an appointment
foreach($teachers as $teacher)
{
    foreach($teacher['slots'] as $slotKey => $slot)
    {
        foreach($appointments as $appointment)
        {
            if($slot['id'] == $appointment['slotid'])
            {
                $teacher[$key][$slotKey]['child'] = $appointment['child_name'];
            }
        }
    }
}

// now lets output the HTML table
?>

<table>

    <tr>
        <th>Teacher</th>
        <?php foreach($slots as $s): ?>
            <th><?php echo $s['time']; ?></th>
        <?php endforeach; ?>
    </tr>

    <?php foreach($teachers as $t): ?>

        <tr>

            <td><?php echo $t['name']; ?></td>
            <?php foreach($t['slots'] as $slot): ?>
                <td><?php echo $slot['child_name']; ?></td>
            <?php endforeach; ?>

        </tr>

    <?php endforeach; ?>

</table>
...