NOVINKA! E-learningové kurzy umělé inteligence. Nyní AI za nejlepší ceny. Zjisti více:
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!

Diskuze: Select , update a následne delete konkrétneho riadku.

V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
Marek Burda
Člen
Avatar
Marek Burda:11.5.2017 13:28

Ahoj. Mám malý problém. Mám tabuľku v SQL ktorá pozostáva aktuálne pre príklad z troch stlpcov. Prvý stlpec je automatické ID (action_id) ktoré sa vytvára po vzniknutí riadku. Druhý stlpec si môžme nazvať "pravidlo" a tretí stlpec sú len nejaké data.

Mojou úlohou je vybrať nejaký riadok (je ich tam napríklad 5, idčka sú od 15 po 20) , urobiť zopár updatov (data z tretieho stlpca sa pozapisujú napríklad do iných tabuliek).

Podmienkou je že si script vyberie nejaký riadok LEN Z riadkov ktoré majú v stlpci "pravidlo" napríklad číslo 1.

Ďalšou vecou je že na konci updatov prebehne aj kod DELETE ktorý vymaže daný riadok s ktorým aktuálne script pracuje. (to tiež neviem nastaviť kedže neviem ako zapísať do WHERE označený riadok)

Myslím že to je všetko ak som naniečo zabudol tak dopíšem. Napadlo mi použiť napríkadl spôsob, aby si script vybral riadok s najmenším ID, Na konci ho samozrejme zmazal. Nejako m ivôbec nenapadá ako pracovať z daným riadkom + ani ako ho selecnúť kedže ID sa môže kedykoľvek nejako zmeniť propípade id 15 tam už o pol hodinu vôbec nemusí byť takže nemôžem scriptu praimo nastaviť nech vyberie napríklad ID 12 alebo 15.

Ďakujem za pomoc

 
Odpovědět
11.5.2017 13:28
Avatar
Odpovídá na Marek Burda
Martin Konečný (pavelco1998):11.5.2017 13:41

Ahoj,
řešíš tohle čistě v jednom SQL dotazu (SELEC,T UPDATE, DELETE), nebo přes program např. v PHP?

Nahoru Odpovědět
11.5.2017 13:41
Aktuálně připravuji browser RPG, FB stránka - https://www.facebook.com/AlteiraCZ
Avatar
Lava
Člen
Avatar
Lava:11.5.2017 13:41
SELECT * FROM tabuľka ORDER BY id DESC LIMIT 1

?

Inak ako vôbec nechapem tej hlaholike, čo si tu popísal, ani čo vlastne potrebuješ :D Skús updatnuť dajaky code.

Editováno 11.5.2017 13:41
Nahoru Odpovědět
11.5.2017 13:41
Aspartám, sacharín, to je môj vitamín
Avatar
Marek Burda
Člen
Avatar
Marek Burda:11.5.2017 15:33

Martin - riešim to v PHP.
Mego - Mám tb_action. Obsahuje 3 stlpce - action_id, action_status, action_data
Tabuľka obsahuje viacero záznamov takže vyzerá nejak takto.
action_id, action_status, action_data , action_user
10 , 1 ,500 , tomas
11, 1 ,600, peter
12, 0 , ,700 , adam

Čo potrebujem urobiť.:
1.SELECT Vybrať jeden z riadkov ktorý action_status=1 (to je jedno ktorý pretože kod s apotom spusti znovu takže nakoniec všetky s statusom 1 vymažem postupne v kroku 3)
2.UPDATE teraz chcem udpatovať druhú tabuľku takže tam nastavím niečo ako toto update tb_users set data=data+$se­lecnuty_riadok[ac­tion_data] WHERE user_name=$se­lecnuty_riadok[ac­tion_user]

2,1 - kódy na updaty už mám no neviem stále určiť ten selecnuty riadok čiže premenna $selecnuty_riadok ktorý by som mal premeniť v kroku 1- Ide o to, že kód si vyberie riadok, uvidí tam že daný riadok v tabuľke sa týka používateľa tomáš, a v update priradí dané data užívateľovi tomáš no v inej tabuľke. Ako píšem tieto kody už mám to moc neriešte - nemám kod na select randomne vybraného raidku.

3.DELETE, - na záver po update v kroku 2, daný riadok z ktorého tieto dáta čítal zmaže. Tento kod mi chýba tiež kedže znovu nepoznám premenu selectu.

 
Nahoru Odpovědět
11.5.2017 15:33
Avatar
Marek Burda
Člen
Avatar
Marek Burda:11.5.2017 17:44

Vie niekto pomôcť teda ?

 
Nahoru Odpovědět
11.5.2017 17:44
Avatar
Odpovídá na Marek Burda
Martin Konečný (pavelco1998):11.5.2017 18:28

Nevím, jak vypadá tvůj kód, ale nástin pomocí PDO by mohl vypadat asi takto:

// 1)
$dataQuery = $pdo->query("SELECT * FROM tbl_action WHERE action_status = 1");
$data = $dataQuery->fetchAll(PDO::FETCH_OBJ);

$pdo->beginTransaction();
foreach ($data as $action) {
        // 2)
        $updateQuery = $pdo->prepare("
                UPDATE tbl_users
                SET data = data + ?
                WHERE user_name = ?
        ");
        $updateQuery->execute(array($action->action_data, $action->user));

        // 3)
        $deleteQuery = $pdo->prepare("
                DELETE FROM tbl_action
                WHERE action_id = ?
        ");
        $deleteQuery->execute(array($action->action_id));
}

$pdo->commit();
Editováno 11.5.2017 18:28
Nahoru Odpovědět
11.5.2017 18:28
Aktuálně připravuji browser RPG, FB stránka - https://www.facebook.com/AlteiraCZ
Avatar
Marek Burda
Člen
Avatar
Marek Burda:11.5.2017 19:49

Notice: Undefined variable: pdo
Fatal error: Call to a member function query() on null in

:/

 
Nahoru Odpovědět
11.5.2017 19:49
Avatar
Marek Burda
Člen
Avatar
Marek Burda:11.5.2017 19:51

Inak čo sa týka v tretej časti ako máme WHERE action_id = ? čo mám dať nameisto otáznika ? id tam nemôžem dať pretože tam bude možnosť aj toho, že daný užívateľ tam bude mať viacej záznamov takže toto by zmazalo všetky jeho záznamy čo nechcem pretože by data z dalšeiho záznamu už nepripisovalo

 
Nahoru Odpovědět
11.5.2017 19:51
Avatar
Odpovídá na Marek Burda
Martin Konečný (pavelco1998):11.5.2017 19:57

Ukaž nám, prosím, kód, který máš ty.

Nahoru Odpovědět
11.5.2017 19:57
Aktuálně připravuji browser RPG, FB stránka - https://www.facebook.com/AlteiraCZ
Avatar
Odpovídá na Marek Burda
Matúš Petrofčík:11.5.2017 20:25

Že ty si sa Marečku stále na tie tutotialy nepozrel?

Nahoru Odpovědět
11.5.2017 20:25
obsah kocky = r^2 ... a preto vlak drnká
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 10 zpráv z 10.