Решение хранится в этом репозитарии. Для каркаса системы использовался мой микрофреймвок он использет PSR4 пространства имен и автолоад. Так же в нем есть маржрутизация и шаблонизация, в общем все что нужно для построения простого приложения.
Ссылка на собранный проект: http://yell.codesale.org
- App/Controllers/AppController.php - обработка входных пааметров
- App/Figures/Circle.php - рисует круг
- App/Figures/Rect.php - рисует прямоугольник(в нашем случае кадрат)
- App/Interfaces/Figure.php - интерфейс для фигуры
- App/Prototypes/Figure.php - прототип просой фигуры(круга)
- App/Views/index.php - вьюха с полями и картинкой
Для добавления новой фигуры надо добавить класс с соответсвующей фигурой в App/Figures/
и переопределить метод draw(&image)
. И добавить во вьюху новую фигуру в селект
<select name="params[<?=$n?>][type]">
<option <?= $param['type'] == 'circle' ? 'selected' : ''?> value="circle">Круг</option>
<option <?= $param['type'] == 'rect' ? 'selected' : ''?> value="rect">Квадрат</option>
<option <?= $param['type'] == 'new_type' ? 'selected' : ''?> value="rect">Новый тип</option>
</select>
Для таких даных можно предложить структуру справочника
Таблица книг(book)
+---------+-----------+
| book_id | book_name |
+---------+-----------+
|1 | Книга 1 |
|2 | Книга 2 |
|3 | Книга 3 |
+---------+-----------+
Таблица Авторов(author)
+-----------+-------------+
| author_id | author_name |
+-----------+-------------+
| 1 | Автор 1 |
| 2 | Автор 2 |
| 3 | Автор 3 |
+-----------+-------------+
Таблица связей(author_to_book)
+----+---------+-----------+
| id | book_id | author_id |
+----+---------+-----------+
| 1 | 1 | 1 |
| 1 | 1 | 2 |
| 1 | 3 | 3 |
| 1 | 4 | 4 |
+----+---------+-----------+
В данном случае подошел бы запрос вот такого вида:
SELECT
data.*
FROM
data
JOIN (
SELECT
type,
max(date) date
FROM
data
GROUP BY
type
) new
ON new.type = data.type AND new.date = data.date