#1 26. 8. 2009 12:05

karapa
Člen
Registrovaný: 26. 8. 2009
Příspěvky: 5

Codeigniter – Více ACTIVE RECORDS v jedné funkci modelu ???

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

 

#2 26. 8. 2009 19:07

phx
Moderator
Místo: HK
Registrovaný: 17. 4. 2008
Příspěvky: 780
Web

Re: Codeigniter – Více ACTIVE RECORDS v jedné funkci modelu ???

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

 

#3 26. 8. 2009 20:20

paranoiq
Člen
Místo: Tábor
Registrovaný: 14. 11. 2006
Příspěvky: 188

Re: Codeigniter – Více ACTIVE RECORDS v jedné funkci modelu ???

@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

 

#4 26. 8. 2009 22:21

karapa
Člen
Registrovaný: 26. 8. 2009
Příspěvky: 5

Re: Codeigniter – Více ACTIVE RECORDS v jedné funkci modelu ???

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

 

#5 26. 8. 2009 23:31

phx
Moderator
Místo: HK
Registrovaný: 17. 4. 2008
Příspěvky: 780
Web

Re: Codeigniter – Více ACTIVE RECORDS v jedné funkci modelu ???

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

 

#6 27. 8. 2009 0:00

karapa
Člen
Registrovaný: 26. 8. 2009
Příspěvky: 5

Re: Codeigniter – Více ACTIVE RECORDS v jedné funkci modelu ???

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

 

#7 27. 8. 2009 7:58

phx
Moderator
Místo: HK
Registrovaný: 17. 4. 2008
Příspěvky: 780
Web

Re: Codeigniter – Více ACTIVE RECORDS v jedné funkci modelu ???

Takze uz to funguje?

Zase ten nebarevnej php kod???!!!

Offline

 

#8 27. 8. 2009 9:59

karapa
Člen
Registrovaný: 26. 8. 2009
Příspěvky: 5

Re: Codeigniter – Více ACTIVE RECORDS v jedné funkci modelu ???

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

 

#9 27. 8. 2009 10:03

karapa
Člen
Registrovaný: 26. 8. 2009
Příspěvky: 5

Re: Codeigniter – Více ACTIVE RECORDS v jedné funkci modelu ???

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

 

#10 27. 8. 2009 10:22

phx
Moderator
Místo: HK
Registrovaný: 17. 4. 2008
Příspěvky: 780
Web

Re: Codeigniter – Více ACTIVE RECORDS v jedné funkci modelu ???

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

 

#11 27. 8. 2009 17:45

paranoiq
Člen
Místo: Tábor
Registrovaný: 14. 11. 2006
Příspěvky: 188

Re: Codeigniter – Více ACTIVE RECORDS v jedné funkci modelu ???

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

 

Zápatí