Autor Zpráva
lopikol
Profil
Mám tabulku user_info, která obsahuje user_id, name, email, about, genre, telephone...... (user_id nastaveno jako unique).

Můj dotaz zní, jak nejlepé udělat dotaz na vložení záznamu v případě, že záznam s daným user_id neexistuje, jinak update.

1.
$exist = SELECT 1 FROM user_info WHERE user_id = 1;

if ($exist) {
   // UPDATE
}else{
  // INSER
}

2. (opičí způsob = vypsání všech sloupců z tabulky user_info)
INSERT INTO user_info (user_id, name, email, about, genre, telephone, ........) 
VALUES ('1', 'asdads', 'Jsdad4', '', 'asdsda', 'eeee', '754545', 'jhkjhk', ..........)
ON DUPLICATE KEY UPDATE name = 'asdads' and email = 'Jsdad4'

Neexistuje ještě nějaký lepší způsob, který to zvládne v jednom datazu?
Tori
Profil
Asi REPLACE? To chcete stejnou funkcí/SQL zpracovávat jak registraci uživatele, tak změnu údajů (jen jsem zvědavá, nenapadá mě jiný důvod použití)?
lopikol
Profil
Tori: Nejdená se o registraci, ale vyplnění profilu. Člověk ho vyplnit nemusí, ale pokud ho vyplní, tak musí mít v db jen jeden řádek. (1:1 = user:user_info).
Jde o to, že mnou uvedený první příklad jsou tři dotazy, resp. vždy dva spuštěné. V druhém případě musim vypsat celou tabulku a až bych db upravoval, tak zas musim upravit funkci.
Tzv. druhý příklad je mnohem horší než ten první ;)

Co jsem koukal, tak REPLACE by mnělo umět, to co chci, ale zase má plno much :/
ShiraNai7
Profil
A k čemu to tak moc potřebuješ cpát do 1 dotazu? Vyplňování profilu snad není akce, která by se prováděla dost často na to, aby měla taková optimalizace vůbec nějaký smysl.
LaMMa
Profil
A co tak pri vytvoreni uzivatela vytvorit aj prazdny profil a potom uz len updatovat? Tym by si mal po probleme...
lopikol
Profil
ShiraNai7: Ani mi nejde o optimalizaci, jako spíš o hledání nových způsobů zápisu. ;)

LaMMa: Pravda, že tohle bude asi nejjednodušší způsob.
jenikkozak
Profil
lopikol:
LaMMa: Pravda, že tohle bude asi nejjednodušší způsob.
Pak se ti bude lépe udržovat, pokud ty informace dáš do jedné tabulky spolu s nickem a id uživatele. Čímž se zřejmě oklikou vrátíš do stavu, ze kterého jsi pravděpodobně vyšel. :)

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0