Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Соединение некоторых полей
 
 автор: Eugene77   (28.07.2009 в 08:41)   письмо автору
 
 

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. Если в таблицу добавятся ещё поля, то хорошо бы оставить их без изменения.

  Ответить  
 
 автор: Trianon   (28.07.2009 в 13:33)   письмо автору
 
   для: Eugene77   (28.07.2009 в 08:41)
 

значения в поле merge чем-то ограничены сверху?

>Если в таблицу добавятся ещё поля, то хорошо бы оставить их без изменения.
Когда в порождающую представления таблицу добавляются поля, они никак не влияют на уже порожденные представления.

  Ответить  
 
 автор: Eugene77   (28.07.2009 в 14:28)   письмо автору
 
   для: Trianon   (28.07.2009 в 13:33)
 

>значения в поле merge чем-то ограничены сверху?

В принципе, ни чем, но реально это очень маленькие числа 1, 2, 3
Можно на это опираться, если иначе трудно сделать

  Ответить  
 
 автор: Trianon   (28.07.2009 в 14:33)   письмо автору
 
   для: 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

  Ответить  
 
 автор: Eugene77   (28.07.2009 в 14:42)   письмо автору
 
   для: Trianon   (28.07.2009 в 14:33)
 

А засчёт чего текстовые поля соединятся?
Один текст должен примкнуть к другому, чтобы получился текстовый отрывок из двух текстов
text1text2


Что такое orig_id ?
это ж неизвестное поле получается

  Ответить  
 
 автор: Trianon   (28.07.2009 в 15:00)   письмо автору
 
   для: 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

  Ответить  
 
 автор: Eugene77   (28.07.2009 в 15:21)   письмо автору
 
   для: 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

  Ответить  
 
 автор: Trianon   (28.07.2009 в 15:23)   письмо автору
 
   для: Eugene77   (28.07.2009 в 15:21)
 

ну да.. group by id, конечно

  Ответить  
 
 автор: Eugene77   (28.07.2009 в 14:38)   письмо автору
 
   для: Trianon   (28.07.2009 в 13:33)
 

>>Если в таблицу добавятся ещё поля, то хорошо бы оставить их без изменения.
>Когда в порождающую представления таблицу добавляются поля, они никак не влияют на уже порожденные представления.

Да, конечно. Как бы выразить свою мысль?...
Хотелось бы чтобы при добавлении новых полей в исходную таблицу,
они появлялись бы и в представлении, не претерпевая никаких изменений.

Или так: чтобы один и тот же запрос позволял создавать представления из таблиц с отличающимся количеством полей, влияя при этом только на 3 указанных поля.

  Ответить  
 
 автор: Trianon   (28.07.2009 в 15:01)   письмо автору
 
   для: Eugene77   (28.07.2009 в 14:38)
 

>>>Если в таблицу добавятся ещё поля, то хорошо бы оставить их без изменения.
>>Когда в порождающую представления таблицу добавляются поля, они никак не влияют на уже порожденные представления.

>Да, конечно. Как бы выразить свою мысль?...
>Хотелось бы чтобы при добавлении новых полей в исходную таблицу,
>они появлялись бы и в представлении, не претерпевая никаких изменений.
>Или так: чтобы один и тот же запрос позволял создавать представления из таблиц с отличающимся количеством полей, влияя при этом только на 3 указанных поля.

Вы хотите странного.
Я бы сказал - невозможного.

  Ответить  
 
 автор: Eugene77   (28.07.2009 в 15:23)   письмо автору
 
   для: Trianon   (28.07.2009 в 15:01)
 

Я думал со звёздочкой какой-нибудь фокус существует.

  Ответить  
 
 автор: Trianon   (28.07.2009 в 15:25)   письмо автору
 
   для: Eugene77   (28.07.2009 в 15:23)
 

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

  Ответить  
 
 автор: Eugene77   (29.07.2009 в 21:37)   письмо автору
 
   для: Trianon   (28.07.2009 в 15:25)
 

>Код представления хранится с уже развернутым списком.

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

Но сам запрос,создающий представление мог бы остаться неизменным.
Впрочем, это мне не так уж обязательно. Обойдусь.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования