IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: SQL 1 query 2 príkazi

Aktivity
Avatar
DREAMDEV
Člen
Avatar
DREAMDEV:16.2.2015 18:54

Zdravím chcem sa spýtať ako by ste poriešili toto: mám 2 tabulky v oboch je stlpec ID pri registrácii by sa malo do oboch tabuliek vlozit rovnake ID ale musi byt autoincrement dá sa to poriešit jedným príkazom? alebo musim vlozit prve AI potom ho vyselektovat a vlozit ho do druhej?

 
Odpovědět
16.2.2015 18:54
Avatar
Odpovídá na DREAMDEV
Neaktivní uživatel:16.2.2015 19:06

Normálně bych vložil záznam do jedné tabulky a poté bych získal poslední vložené ID (za předpokladu, že používáš PDO). Poté bych vložil záznam do druhé tabulky s tím daným ID, které jsem získal...

$db = new PDO(...);

// První dotaz

$lastId = $db->lastInsertId(); // Získáme ID

// Druhý dotaz s $lastId
Nahoru Odpovědět
16.2.2015 19:06
Neaktivní uživatelský účet
Avatar
Odpovídá na Neaktivní uživatel
Neaktivní uživatel:16.2.2015 19:10

Proč zbytečně tahat id, když stačí do obou jen vložit?

Nahoru Odpovědět
16.2.2015 19:10
Neaktivní uživatelský účet
Avatar
Odpovídá na DREAMDEV
Neaktivní uživatel:16.2.2015 19:10

Cítím nějakou chybu v návrhu.

Nahoru Odpovědět
16.2.2015 19:10
Neaktivní uživatelský účet
Avatar
Odpovídá na Neaktivní uživatel
Neaktivní uživatel:16.2.2015 19:19

Mohla by nastat nesrovnalost, že by se do jedné něco omylem navíc vložilo, pak by se nové ID neshodovaly...

Nahoru Odpovědět
16.2.2015 19:19
Neaktivní uživatelský účet
Avatar
Odpovídá na Neaktivní uživatel
Neaktivní uživatel:16.2.2015 19:21

To je dost nepravděpodobné.

Nahoru Odpovědět
16.2.2015 19:21
Neaktivní uživatelský účet
Avatar
DREAMDEV
Člen
Avatar
DREAMDEV:16.2.2015 19:54

presne na to som myslel to by bol dost problem a nemoze sa stat ze by sa dvaja uzivatelia rigistrovali v pomerne rovnakom case a nejako by sa tie prikazi pomiesali? ze by sa najprv vikonal prikaz1 pre uzivatel1 potom prikaz1 pre uzivatel2 a potom prikaz2 u.1 a p.2 pre u.2 tak by sa tie IDcka vlastne posunuli ale neviem ci taka moznost moze nastat niesom profik zatial :)

 
Nahoru Odpovědět
16.2.2015 19:54
Avatar
DREAMDEV
Člen
Avatar
DREAMDEV:16.2.2015 20:49

mno poriesil som to asi takto nejak zatial:

Db::query('
INSERT INTO users (email, password, last_login)
VALUES (?, ?, ?)
', $email , $password, time());

Db::query('
INSERT INTO pilots (ID)
SELECT ID FROM users WHERE email=?
', $email);

otázkov je ci sa tieto 2 prikazi daju zmrštit do jedneho query?

 
Nahoru Odpovědět
16.2.2015 20:49
Avatar
Odpovídá na DREAMDEV
Neaktivní uživatel:16.2.2015 22:05
Db::query('INSERT INTO users (email, password, last_login) VALUES (?, ?, ?);INSERT INTO pilots (ID) SELECT ID FROM users WHERE email=?',
$email , $password, time(), $email);

Snad jsem se neupsal, jsem už dost jetej dneska :) Tímhle eliminuješ tu kolizi.

// Tady už by měla být patrná zbytečnost toho selectu

Editováno 16.2.2015 22:07
Nahoru Odpovědět
16.2.2015 22:05
Neaktivní uživatelský účet
Avatar
DREAMDEV
Člen
Avatar
Odpovídá na Neaktivní uživatel
DREAMDEV:16.2.2015 23:02

skusal som to tak ale vyhodilo mi error nechapem preco mozno som vynechal nejaku .,' alebo iny kravinec este to skusim :)

 
Nahoru Odpovědět
16.2.2015 23:02
Avatar
Martin Konečný (pavelco1998):16.2.2015 23:50

Ještě to lze řešit triggerem :D

Něco jako

CREATE TRIGGER nazev AFTER INSERT ON tabulka FOR EACH ROW
BEGIN:

  INSERT INTO pilots (id) VALUES (NEW.id_z_prvni_tabulky);

END;
Nahoru Odpovědět
16.2.2015 23:50
Aktuálně připravuji browser RPG, FB stránka - https://www.facebook.com/AlteiraCZ
Avatar
Odpovídá na DREAMDEV
Neaktivní uživatel:17.2.2015 8:58

Error kvůli SQL dotazu, nebo kvůli php?

Nahoru Odpovědět
17.2.2015 8:58
Neaktivní uživatelský účet
Avatar
DREAMDEV
Člen
Avatar
Odpovídá na Neaktivní uživatel
DREAMDEV:17.2.2015 12:14

myslim ze kvoli SQL

 
Nahoru Odpovědět
17.2.2015 12:14
Avatar
Odpovídá na DREAMDEV
Neaktivní uživatel:17.2.2015 14:14

Tak to zjisti, nemysli :D Jinak ti neporadíme.

Nahoru Odpovědět
17.2.2015 14:14
Neaktivní uživatelský účet
Avatar
DREAMDEV
Člen
Avatar
Odpovídá na Neaktivní uživatel
DREAMDEV:17.2.2015 15:00

ono je to tak ze to mvc v ktorom to robim tie chyby zachytava nejako vlastnym spôsobom a teraz mi nevypise ziadnu hlasku iba ze je tam chyba keby bola v PHP tak myslim ze by tam nieco napisalo a bez hlasky mi to ukazuje zvycajne vtedy ked spravim chybu v SQL prikaze.

 
Nahoru Odpovědět
17.2.2015 15:00
Avatar
Odpovídá na DREAMDEV
Neaktivní uživatel:17.2.2015 16:45

To je skvělý systém :)

Nahoru Odpovědět
17.2.2015 16:45
Neaktivní uživatelský účet
Avatar
DREAMDEV
Člen
Avatar
DREAMDEV:17.2.2015 17:32

ja som ho nerobil :D

 
Nahoru Odpovědět
17.2.2015 17:32
Avatar
mkub
Tvůrce
Avatar
Odpovídá na DREAMDEV
mkub:18.2.2015 2:04
  1. ked je chyba v PHP, nemusi sa ti zobrazit error (napr. tzv. logicke chyby)
  2. kolizie dotazov sa daju riesit uzamykanim tabuliek, resp. transakciami (pri transakciach treba zvolit DB engine, co ich podporuje)
 
Nahoru Odpovědět
18.2.2015 2:04
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 18 zpráv z 18.