Oznámení
Omlouváme se, provoz fóra byl ukončen
UPSERT a feature request pro novy modifikator
Upozornění: Tohle vlákno je hodně staré.
před 9 lety
- Skic
- Člen | 18
Jak vypada SQL upsert dotaz:
INSERT INTO `tbl` (`id`, `text`, `desc`) VALUES (1, 'h', 'hh') , (2, 'g', 'gg')
ON DUPLICATE KEY UPDATE `text`=VALUES(`text`), `desc`=VALUES(`desc`)
Pole dat pro dibi s vice radky zaznamu, ktere se pro multi INSERT expanduje modifikatorem %ex
$data = array(
array('id' => 1, 'text' => "h", 'desc' => "hh"),
array('id' => 2, 'text' => "g", 'desc' => "gg"),
);
dibi::query('INSERT INTO [tbl] %ex', $data);
Pro upsert bych si predstavoval takovyto dotaz na dibi s novym modifikatorem „%ev“:
dibi::query('INSERT INTO [tbl] %ex, ', $data, ' ON DUPLICATE KEY UPDATE %ev', $data);
Modifikator by expandoval klice z prvni polozky dat do podoby viz. ukazka sql [zdrojovy kod c.1];
DibiTranslator.php (okolo radku 300):
case 'ev':
$cols = array_keys($value[0]);
foreach ($cols as &$col) {
$col = "{$this->delimite($col)}=VALUES({$this->delimite($col)})";
}
return implode(',', $cols);
Nebo mozna nechat na uzivateli vyjmenovani polozek pro update:
dibi::query('INSERT INTO [tbl] %ex, ', $data, ' ON DUPLICATE KEY UPDATE %ev', array_keys($data[0]));
A patricne zmenena implementace modifikatoru…
Editoval Skic (30. 7. 2010 22:19)
před 9 lety
- David Grudl
- Nette Core | 6806
To by mohlo být užitečné. Jen začíná být trošku zmatek
v modifikátorech. %ev
asi není ideální.
Ještě to chce domyslet, jak vybrat všechny ty klíče s výjimkou
id
.