2013-09-29 3 views
1

Мне нужно обновить поле с именем «tipos» в таблице с именем azz_properties со значениями из других таблиц с именем azz_locality (имя поля - «имя») и azz_category (имя поля также является «именем»), используя слово для разделения этих значений, слово «in». В сущности, мне нужно создать фразу мини-описания, например «Категория собственности в области собственности», пример. Дом в Риме.Объединить таблицу для создания поля с данными из разных таблиц

Кроме того, мне нужно обновить значение только в том случае, если оно пустое.

Я пробовал следующий код, но я получаю «0 линии затронуто»

update azz_properties p join 
    azz_locality l 
    on p.id = l.id join 
    azz_category c 
    on p.id = c.id 
set p.tipos = concat(c.name, ' in ', l.name); 

Любой человек может помочь мне, пожалуйста? Что я делаю не так?

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

Таблица azz_category

id name alias parent published ordering 
17 Apartamentos apartamentos 0 1 0 
18 Casas casas 0 1 1 
19 Casas em condominios casas-em-condominios 0 1 2 
20 Coberturas coberturas 0 1 3 

Таблица azz_locality

id parent mid  zipcode  name alias published ordering checked_out  checked_out_time 
1 1 0 0 Abraão abraao 1 0 0 0000-00-00 00:00:00 
2 1 0 0 Armação  armacao  1 0 0 0000-00-00 00:00:00 
3 1 0 0 Agronômica agronomica 1 0 0 0000-00-00 00:00:00 
5 1 0 0 Bairro de Fatima bairro-de-fatima 1 0 0 0000-00-00 00:00:00 
6 1 0 0 Balneário Estreito balneario-estreito 1 0 0 0000-00-00 00:00:00 
7 1 0 0 Barra da Lagoa barra-da-lagoa 1 0 0 0000-00-00 00:00:00 
9 1 0 0 Beira Mar beira-mar 1 0 0 0000-00-00 00:00:00 
10 1 0 0 Bela Vista bela-vista 1 0 0 0000-00-00 00:00:00 
168  19 0 0 Siriú siriu 0 0 0 0000-00-00 00:00:00 

Это azz_properties, где идентификатор категории поле «чид» и локальность идентификатор «крышка»

id name name_tipos name_barrios alias parent agent_id agent ref  type cid  lid  sid  cyid postcode address  description  text text_es  text_en  text_barrios tipos price published use_booking  ordering panoramic video lat  lng  available featured years bedrooms bathrooms garage area covered_area hits listdate refresh_time checked_out  checked_out_time 
2920 Vendo Apartamento... Vendo Apartamento...  vendo-apartamento... 0 62  A3044 62 17 3 1 1  Rua Silveira Agenciamento...  <p>Apartamento ... 360000.00 1 0 0 NULL  0.000000 0.000000 0 0 2012.01.01.05110 3 2 1 105  90 231  2013-05-03 2013-05-03 00:00:00  0 0000-00-00 00:00:00  
+1

Вы можете показать несколько строку выборки данных из каждой таблицы? Кажется странным, что идентификаторы будут одинаковыми; как правило, 'azz_properties' будет содержать * другие * поля, ссылающиеся на' azz_category.id' и 'azz_locality.id' –

+0

ОК, извините !!! Я делаю это! – ol30cean0

ответ

1

Похоже, что вам нужно, учитывая данные, является:

update azz_properties p join 
    azz_locality l 
    on p.lid = l.id join 
    azz_category c 
    on p.cid = c.id 
set p.tipos = concat(c.name, ' in ', l.name); 
+0

он работает большое спасибо! У меня есть одна последняя проблема, данные, которые у меня есть сейчас, в полевых томах: Аппартаменты в Агрономе и мне это нужно без «s», например Apartamento in Agronomica, есть ли решение? – ol30cean0

+0

Вы можете * посмотреть на что-то вроде http://stackoverflow.com/questions/1755408/mysql-regex-replace, чтобы увидеть замену символов «s», но это не сработает для таких вещей, как «Casas em condominios «где вы хотите« Casa em condominio »или« Casa ou condomínio ». Если вы хотите быть осторожным в этом, я бы добавил отдельную таблицу имен особых категорий (с теми же ключами, что и 'azz_category'), внешнее объединение, которое используется, и используйте' coalesce (unique.name, c.name) ' внутри вашего 'concat', чтобы получить сингулярную версию (если она есть) или вернуться к оригиналу. –

+0

да, отличная идея, добавив отдельную таблицу с одинаковыми идентификаторами категорий и naomes без S! Спасибо, ты очень умный! – ol30cean0

Смежные вопросы