Дима Килигин
Дима Килигин

Головоломка PHP/HTML

Добрый день, уже второй день ломаю мозг с, на первый взгляд, тривиальной задачей:
есть 2 таблички: author, message

author
| id | firstname | lastname |
| 1 | иван | боженов |
| 2 | артем | рукин |
| 3 | вася | лохматый |

message
| id | text | userid |
| 1 | Задание по физике | 2 |
| 2 | Задание по математике | 3 |
| 3 | Задание по алгебре | 1 |
| 4 | Задание по литературе | 1 |

необходимо вывести данные html-табличкой типа:

| пользователи | Задание по физике | Задание по математике | Задание по алгебре | Задание по литературе |
| иван боженов |______--__________|___________--__________|_________+_________|___________+__________|
| артем рукин |______ ++ ________|__________ --_________| _________ --_________ | ___________ -- ________|
| вася лохматый | _____-- _________|__________++ ________|__________ --_________| __________-- __________|

не могу понять как это правильно сделать... .
Из запроса:
SELECT author.lastname, author.firstname, message.text
FROM author
LEFT JOIN message ON message.userid = author.id

Я получаю информацию о том кто какие сообщения отправил и список пользователей
lastname firstname text
Боженов Иван Задание по алгебре
Боженов Иван Задание по литератур
Рукин Артем Задание по физике
Лохматый Вася Задание по математи

Из запроса:
SELECT text
FROM `message`
я получаю массив заданий который смогу разложить в шапке таблице
Задание по физике
Задание по математик
Задание по алгебре
Задание по литератур

но как правильно собрать всю таблицу в том виде в котором мне необходимо я пока не понял.

Подскажите пожалуйста, спасибо!

Сначала печатаю столбец - список пользователей, потом обхожу массив с сообщениями и после каждого задания делаю запрос с лефтджоином и обхожу массив по конкретному заданию - если в элементе NULL - печатаем -- если есть ответ печатаем ++,при таком подходе будет много запросов в базу - столько сколько сообщений отправлено а их может быть много.
Можно ли используя используя всего 1-2 запроса (например приведенных выше) собрать такую табличку?

Ил
Иллиан

В первом запросе джойн не нужен.

Если стоит задача выбрать только двумя запросами, я бы решил так (в лоб) :

1. SELECT * FROM author
2. Сформировать массив с авторами
3. SELECT * FROM message
4. Сформировать массив с сообщениями.
5.
[table]
[tr]
[th][/th]
[?php
foreach($messages as $message) {
echo '[th]'.$message['text'].'[/th]';
}
echo '[/tr]';
foreach($authors as $author) {
echo '[tr]';
echo '[td]'.$author['lastname'].' '.$author['firstname'].'[/td]';
foreach($messages as $message) {
echo '[td]'.
($message['userid']==$author['id'] ? '+' : '-').
'[/td]';
}
echo '[/tr]';
}
?]
[/table]

Bobur
Bobur

Бо нефиг на таблицах экономить. Всё, что можно переложить на СУБД, надо перекладывать. На каждого пользователя по таблице. Имеем тупо двумерный массив предмет-количество. И выводим построчно.

Похожие вопросы
где можно потренироваться HTML PHP MYSQL
Вопрос по HTML и PHP
что такое php, и чем он отличается от html?
PHP. Как отправить данные из html в php.
Как сделать чтение из txt файла по средствам HTML и PHP?
Вопрос по php и html
По сайтостроению.. . PHP или html
Языки программирования для Интернета: HTML, Perl, PHP, XML
Кто шарит в HTML и PHP ?
Здравствуйте, как нужно сохранять эту мизерную работку, в .html или в .php?