2013-10-09 3 views
1

FolksОбновление запросов в MySQL для новых столбцов

У меня есть таблица, как показано ниже

enter image description here

Мы предполагаем добавить новый столбец, т.е. parent_country после столбца COUNTRYNAME и результат должен быть как ниже

id parentid countryname    Parent_country 

39 0  Barbados      Barbados 
40 39  Barbados mobile    Barbados 
41 39  Mobile Digicel    Barbados 
42 0  Anguilla      Anguilla 
43 42  Anguilla Mobile    Anguilla 
44 42  hello Mobile Digicel   Anguilla 

Благодаря

+2

Что вы пытаетесь до сих пор? – Sal00m

+0

мы можем обновить только для parentid = 0 – dell

+0

Включите свой запрос в вопрос – Paddyd

ответ

4

Я не думаю, что вы должны добавить колонку. Вы нарушаете одно из основных правил нормализации. Вот запрос, который даст вам нужные результаты.

SELECT tbl.id as id 
    , tbl.parentid as parentid 
    , tbl.countryname as countryname 
    , COALESCE(parent.countryname, tbl.countryname) as Parent_country 
FROM tbl 
LEFT JOIN tbl AS parent 
ON tbl.parentid = parent.id 

И легче достаточно, чтобы превратить в вид, который (хотя и не обновляемые) могут имитировать таблицу для целей чтения

CREATE VIEW tbl_trick_business_team AS 
SELECT tbl.id as id 
    , tbl.parentid as parentid 
    , tbl.countryname as countryname 
    , COALESCE(parent.countryname, tbl.countryname) as Parent_country 
FROM tbl 
LEFT JOIN tbl AS parent 
ON tbl.parentid = parent.id 
+0

спасибо agRizzo, но мне нужен новый столбец (parent_country) для использования в другой таблице. – dell

+0

@ user1927716 - Я не могу спорить с вашими бизнес-требованиями, это просто не хорошая технологическая практика. Не могли бы вы использовать представление? – AgRizzo

+0

ваш запрос отлично, но нам нужно было обновить базовую таблицу на основе этого результата. – dell

0

Вы должны передать идентификатор в $id переменной, а затем написать запрос

UPDATE tablename SET Parent_country='Barbados' WHERE id='".$id."' LIMIT 1" 
+0

его около 500 тыс. Записей .. – dell

+0

где id = '". $ Id."' SET limit 500 – Punitha

+0

Lol, вы говорите о строковых запросах один за другим ??? – Sal00m

1

Не будет добавить столбец, так как данные можно получить с selfie join и нарушает нормализацию - вы будете использовать больше места в БД. Однако в некоторых случаях это может быть полезно для ускорения.

, но если у вас есть, здесь мы идем

ALTER TABLE tablename ADD COLUMN p_name(text); 


UPDATE tablename 
INNER JOIN 
    (SELECT id, 
      parentid, 
      country_name 
    FROM tablename)a ON tablename.parent_id=a.id 
SET tablename.p_name=a.country_name; 
Смежные вопросы