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
Fredep
Redaktor
Avatar
Odpovídá na DREAMDEV
Fredep: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
Týmová práce je důležitá proto, aby bylo možno obvinit z neúspěchu někoho jiného.
Avatar
Jiří Gracík
Redaktor
Avatar
Odpovídá na Fredep
Jiří Gracík: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
Creating websites is awesome till you see the result in another browser ...
Avatar
Jiří Gracík
Redaktor
Avatar
Odpovídá na DREAMDEV
Jiří Gracík:16.2.2015 19:10

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

Nahoru Odpovědět 16.2.2015 19:10
Creating websites is awesome till you see the result in another browser ...
Avatar
Fredep
Redaktor
Avatar
Odpovídá na Jiří Gracík
Fredep: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  +1 16.2.2015 19:19
Týmová práce je důležitá proto, aby bylo možno obvinit z neúspěchu někoho jiného.
Avatar
Jiří Gracík
Redaktor
Avatar
Odpovídá na Fredep
Jiří Gracík:16.2.2015 19:21

To je dost nepravděpodobné.

Nahoru Odpovědět  +1 16.2.2015 19:21
Creating websites is awesome till you see the result in another browser ...
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
Jiří Gracík
Redaktor
Avatar
Odpovídá na DREAMDEV
Jiří Gracík: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
Creating websites is awesome till you see the result in another browser ...
Avatar
DREAMDEV
Člen
Avatar
Odpovídá na Jiří Gracík
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  +2 16.2.2015 23:50
Aktuálně připravuji browser RPG, FB stránka - https://www.facebook.com/AlteiraCZ
Avatar
Jiří Gracík
Redaktor
Avatar
Odpovídá na DREAMDEV
Jiří Gracík:17.2.2015 8:58

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

Nahoru Odpovědět 17.2.2015 8:58
Creating websites is awesome till you see the result in another browser ...
Avatar
DREAMDEV
Člen
Avatar
Odpovídá na Jiří Gracík
DREAMDEV:17.2.2015 12:14

myslim ze kvoli SQL

 
Nahoru Odpovědět 17.2.2015 12:14
Avatar
Jiří Gracík
Redaktor
Avatar
Odpovídá na DREAMDEV
Jiří Gracík:17.2.2015 14:14

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

Nahoru Odpovědět 17.2.2015 14:14
Creating websites is awesome till you see the result in another browser ...
Avatar
DREAMDEV
Člen
Avatar
Odpovídá na Jiří Gracík
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
Jiří Gracík
Redaktor
Avatar
Odpovídá na DREAMDEV
Jiří Gracík:17.2.2015 16:45

To je skvělý systém :)

Nahoru Odpovědět 17.2.2015 16:45
Creating websites is awesome till you see the result in another browser ...
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
Redaktor
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.