PHP fóra: Builder | JakPsatWeb | Webtrh
Nejste přihlášen(a)
Stránky: 1
Ahoj, potřebuji poradit. Mám zde funkci, ale provede jen první operaci a na druhou se zřejmě už nedostane. Můžete mi poradit jestli v rámci jedné funkce modelu lze třeba aktualizovat více řádek v databázi pomocí UPDATE ?
Zmiňovaná funkce:
<?php
function posun_nahoru($id_stranky,$poradi_posunovane_radky)
{
$poradi_predchozi_radky = $poradi_posunovane_radky - 1;
$this->db->update('clanky', array('poradi' => $poradi_predchozi_radky), array('id_stranky' => $id_stranky, 'poradi' => $poradi_posunovane_radky));
$this->db->update('clanky', array('poradi' => $poradi_posunovane_radky), array('id_stranky' => $id_stranky, 'poradi' => $poradi_predchozi_radky));
}
?>
// Editoval Tomik: Kód obarven…
Offline
Precti si jak spravne vkladat kod do fora zde
Jak na druhou se zrejme nedostane??? To to samovolne skonci? Nebo nejaka chyba???
Nechapu proc by neslo poslat 2 SQL dotazy za sebou.
Jaky DB layer pouzivas?
Offline
@karapa: neznám codeigniter, ale takovou záludnost snad nedělá žádný
fw ani db layer. jediné smysluplné co mě napadá je to, že máš třeba na
id_stranky a poradi společný unikátní klíč a
chybuje to při té změně
Z Javy do PHP nikdy nic dobrého nepřišlo. / http://twitter.com/paranoiq
Offline
zadna chyba neni. Vsechno to probehne ale bohuzel se spatnym vysledkem. Jinak oba sql dotazy zvlast funguji ale soucasne zapsany ne. Takze chyba je nejspise jinde nez v kodu. Pouzivam XAMPP v zakladnim nastavenim a PHPMYADMIN na serveru. Nemáte tušení kde může být chyba ? Možná jsem neodpověděl na ten DB LAYER …
Offline
Dejme tomu, ze $poradi_posunovane_radky = 10 → $poradi_predchozi_radky = 9.
Ty ale provedes $poradi = 9 kdyz $poradi = 10 a potom $poradi = 10 kdyz $poradi = 9.
Coz by melo udelat to, ze ve vesledku bude mit 2 radky s poradim 10. Nebude v tomto problem?
Pokud ne tak posli CREATE tabulky a konkretni SQL prikazy do DB.
Offline
ted mam tuhle funkci …
<?php
function posun_nahoru($id_stranky,$poradi_posunovane_radky)
{
$this->db->set('poradi', $poradi_posunovane_radky, FALSE);
$this->db->where(array('id_stranky' => $id_stranky, 'poradi' => $poradi_posunovane_radky - 1));
$query_2 = $this->db->update('clanky');
$this->db->set('poradi', $poradi_posunovane_radky - 1, FALSE);
$this->db->where(array('id_stranky' => $id_stranky, 'poradi' => $poradi_posunovane_radky));
$query_1 = $this->db->update('clanky');
}
?>
přišel jsem na to … chyba je tam, že já si vezmu řádku a té přepíšu pořadí na o jedničku větší a pak hledam řádku s pořadím ale které jsem si už přepsal a nenajdu tu správnou řádku
Editoval karapa (27. 8. 2009 9:53)
Offline
NE NE tohle nefunguje a asi ani nebude. Je tam obycejna chyba. Dve radky maji po prvnim UPDATE stejne poradi a ja uz se nedostanu k te co potrebuji abych ji zmenil poradi o jednicku mene. Pouziju k tomu jeste jeden parametr ID te radky kterej je pro kazdou radku unikatni a tim se k ni dostanu a zmenim ji poradi jak potrebuji.
diky za odpovedi
Offline
funkce ktera jiz funguje:
<?php
function posun_nahoru($id_stranky,$poradi_posunovane_radky,$id) // novy parametr $id, unikatni
{
$this->db->set('poradi', $poradi_posunovane_radky, FALSE);
$this->db->where(array('id_stranky' => $id_stranky, 'poradi' => $poradi_posunovane_radky - 1));
$query_2 = $this->db->update('clanky');
$this->db->set('poradi', $poradi_posunovane_radky - 1, FALSE);
$this->db->where(array('id_stranky' => $id_stranky, 'id' => $id));
$query_1 = $this->db->update('clanky');
}
?>
Offline
Fajn:) Sice to nove reseni moc nechapu, ale to bude asi neznalosti CodeIgniter. Osobne na takoveto pripady pouzivam but PK radku nebo priznakovy sloupec. A to cele uzavrene v transakci aby to bylo atomicke.
Jen pozor aby jsi mel neprerusovanou cislovanou radu, protoze pouzivat poradi – 1.
Offline
aha! jak evidentní :P
mimochodem, když se oprostíme od těch ‚všemocných‘ db layerů, tak to jde i jedním dotazem
UPDATE `clanky` SET `poradi` = IF(`poradi` = $prvni, $druhy, $prvni) WHERE `id_stranky` = $idStranky AND `poradi` IN ($prvni, $druhy)
Z Javy do PHP nikdy nic dobrého nepřišlo. / http://twitter.com/paranoiq
Offline
Stránky: 1