Hakan ERSUKaralamalar / Notlar

MYSQL tek query ile birden çok alan güncellemek

i love php
Mysql bize birçok fonksiyonlar kolaylık sağlamakta.Bunlarda biride php’de kullandığımız switch-case yapısana benzer bir işleyiş gösteren case-when ifadesi.
Örneklemek gerekirse yazılarımız için kullandığım dil alanlarını tuttuğum bir tablom var diyelim.

CREATE TABLE IF NOT EXISTS `page_language` (
  `l_id` int(11) NOT NULL AUTO_INCREMENT,
  `i_id` int(11) NOT NULL,
  `l_content` longtext NOT NULL,
  `l_type` enum('c_title','c_content','c_seo','k_title') NOT NULL,
  `l_language` enum('tr','en','de','fr') NOT NULL,
  PRIMARY KEY (`l_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=54 ;

Görüldüğü gibi l_type olarak tanımladığımız alan c_title,c_content,c_seo,k_title degerlerini alabilmekte.Herhangi bir yazı girildiğinde herbir baslik,icerik ve seo için ayrı alanlar oluşmakta.

(10, 2, 'ALAN ICERIK', 'c_content', 'tr'),
(11, 2, 'ALAN SEO', 'c_seo', 'tr'),
(12, 3, 'ALAN BASLIk', 'c_title', 'tr'),

Basit bir şekilde bu alanları güncellemek istersek;

UPDATE page_language  SET  l_content = CASE l_type
WHEN 'c_title' THEN 'Yeni Baslik'
WHEN 'c_content' THEN 'Yeni icerik'
WHEN 'c_seo' THEN 'yeni-baslik'
ELSE l_content
END
WHERE i_id='2' and l_language='tr'

Bir Cevap Yazın

KATEGORILER

Copyright © Hakan ERSU.All rights reserved