Diskuze: SQL 1 query 2 príkazi

PHP PHP SQL 1 query 2 príkazi American English version English version

Avatar
DREAMDEV
Člen
Avatar
DREAMDEV:

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
"minulosť je na to aby si odhalil chyby ktoré sa stali a v prítomnosti ich opravil pre lepšiu budúcnosť" - Ja
Avatar
Fredep
Redaktor
Avatar
Odpovídá na DREAMDEV
Fredep:

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:

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:

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:

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:

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:

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
"minulosť je na to aby si odhalil chyby ktoré sa stali a v prítomnosti ich opravil pre lepšiu budúcnosť" - Ja
Avatar
DREAMDEV
Člen
Avatar
DREAMDEV:

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
"minulosť je na to aby si odhalil chyby ktoré sa stali a v prítomnosti ich opravil pre lepšiu budúcnosť" - Ja
Avatar
Jiří Gracík
Redaktor
Avatar
Odpovídá na DREAMDEV
Jiří Gracík:
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:

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
"minulosť je na to aby si odhalil chyby ktoré sa stali a v prítomnosti ich opravil pre lepšiu budúcnosť" - Ja
Avatar
Martin Konečný (pavelco1998):

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
Avatar
Jiří Gracík
Redaktor
Avatar
Odpovídá na DREAMDEV
Jiří Gracík:

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
Nahoru Odpovědět 17.2.2015 12:14
"minulosť je na to aby si odhalil chyby ktoré sa stali a v prítomnosti ich opravil pre lepšiu budúcnosť" - Ja
Avatar
Jiří Gracík
Redaktor
Avatar
Odpovídá na DREAMDEV
Jiří Gracík:

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:

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
"minulosť je na to aby si odhalil chyby ktoré sa stali a v prítomnosti ich opravil pre lepšiu budúcnosť" - Ja
Avatar
Jiří Gracík
Redaktor
Avatar
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:

ja som ho nerobil :D

Nahoru Odpovědět 17.2.2015 17:32
"minulosť je na to aby si odhalil chyby ktoré sa stali a v prítomnosti ich opravil pre lepšiu budúcnosť" - Ja
Avatar
mkub
Redaktor
Avatar
Odpovídá na DREAMDEV
mkub:
  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.