|
|
|
|
CREATE TABLE my_tab (
INT id,
TEXT t,
INT `merge`)
INSERT my_tab(
(1, 'text1', 1),
(1, 'text2', 2),
(2, 'text3', 1),
(4, 'text1', 1),
(4, 'text2', 2),
(6, 'text3', 1)
)
|
Мне надо получить представление этой таблицы в котором id стало бы уникальным, а текстовые поля соединились бы (CONCAT) (если их несколько) в порядке возрастания номеров поля `merge`. В поле `merge` предсавления надо оставить наибольшее число, которое бывает для данного id. Если в таблицу добавятся ещё поля, то хорошо бы оставить их без изменения. | |
|
|
|
|
|
|
|
для: Eugene77
(28.07.2009 в 08:41)
| | значения в поле merge чем-то ограничены сверху?
>Если в таблицу добавятся ещё поля, то хорошо бы оставить их без изменения.
Когда в порождающую представления таблицу добавляются поля, они никак не влияют на уже порожденные представления. | |
|
|
|
|
|
|
|
для: Trianon
(28.07.2009 в 13:33)
| | >значения в поле merge чем-то ограничены сверху?
В принципе, ни чем, но реально это очень маленькие числа 1, 2, 3
Можно на это опираться, если иначе трудно сделать | |
|
|
|
|
|
|
|
для: Eugene77
(28.07.2009 в 14:28)
| |
CREATE VIEW my_view AS
SELECT id*100+merge AS id, orig_id AS id, t, merge
FROM my_tab
|
| |
|
|
|
|
|
|
|
для: Trianon
(28.07.2009 в 14:33)
| | А засчёт чего текстовые поля соединятся?
Один текст должен примкнуть к другому, чтобы получился текстовый отрывок из двух текстов
Что такое orig_id ?
это ж неизвестное поле получается | |
|
|
|
|
|
|
|
для: Eugene77
(28.07.2009 в 14:28)
| | сперва не понял.
CREATE VIEW my_view AS
SELECT
id,
GROUP_CONCAT(t ORDER BY merge) AS t,
MAX(merge) AS merge
FROM my_tab
|
| |
|
|
|
|
|
|
|
для: Trianon
(28.07.2009 в 15:00)
| | >
CREATE VIEW my_view AS
> SELECT
> id,
> GROUP_CONCAT(t ORDER BY merge) AS t,
> MAX(merge) AS merge
> FROM my_tab
GROUP BY id
|
Вы наверно имели ввиду.
Да, отлично работает.
Спасибо!
А то я совсем забыл, что бывает GROUP_CONCAT | |
|
|
|
|
|
|
|
для: Eugene77
(28.07.2009 в 15:21)
| | ну да.. group by id, конечно | |
|
|
|
|
|
|
|
для: Trianon
(28.07.2009 в 13:33)
| | >>Если в таблицу добавятся ещё поля, то хорошо бы оставить их без изменения.
>Когда в порождающую представления таблицу добавляются поля, они никак не влияют на уже порожденные представления.
Да, конечно. Как бы выразить свою мысль?...
Хотелось бы чтобы при добавлении новых полей в исходную таблицу,
они появлялись бы и в представлении, не претерпевая никаких изменений.
Или так: чтобы один и тот же запрос позволял создавать представления из таблиц с отличающимся количеством полей, влияя при этом только на 3 указанных поля. | |
|
|
|
|
|
|
|
для: Eugene77
(28.07.2009 в 14:38)
| | >>>Если в таблицу добавятся ещё поля, то хорошо бы оставить их без изменения.
>>Когда в порождающую представления таблицу добавляются поля, они никак не влияют на уже порожденные представления.
>Да, конечно. Как бы выразить свою мысль?...
>Хотелось бы чтобы при добавлении новых полей в исходную таблицу,
>они появлялись бы и в представлении, не претерпевая никаких изменений.
>Или так: чтобы один и тот же запрос позволял создавать представления из таблиц с отличающимся количеством полей, влияя при этом только на 3 указанных поля.
Вы хотите странного.
Я бы сказал - невозможного. | |
|
|
|
|
|
|
|
для: Trianon
(28.07.2009 в 15:01)
| | Я думал со звёздочкой какой-нибудь фокус существует. | |
|
|
|
|
|
|
|
для: Eugene77
(28.07.2009 в 15:23)
| | Фокус со звездочкой является статическим, даже будучи применен, разворачивает звездочку в список в момент создания представления, а не в момент его использования.
Код представления хранится с уже развернутым списком. | |
|
|
|
|
|
|
|
для: Trianon
(28.07.2009 в 15:25)
| | >Код представления хранится с уже развернутым списком.
Это я уже заметил.
Поэтому понимаю, что при изменении порождающей таблицы надо заново делать запрос на создание представления, если надо чтобы список полей в представлении изменился.
Но сам запрос,создающий представление мог бы остаться неизменным.
Впрочем, это мне не так уж обязательно. Обойдусь. | |
|
|
|