Autor Zpráva
4ever
Profil
Dá se v php udělat vkládání do databáze tak, abych nemusel posílat dotaz po jednotlivých řádcích, ale vše najednou?

Příklad: provedu prohledání adresářové struktury a do tabulky chci uložit jméno, cestu, datum a čas a další informace, které jsem o souboru vyčetl.

Hledání provádím pomocí cyklu, jde jen o to, jestli to vše připravit jako jeden dotaz pro databází (mysql) nebo to mám posílat po jednom příkazu.
djlj
Profil
4ever:
do tabulky chci uložit jméno, cestu, datum a čas a další informace, které jsem o souboru vyčetl
Však tohle se dělá jedním dotazem pro vložení. Nebo jak to tedy teď děláš ty?

Nebo tím myslíš to, že vkládáš do databáze všechny soubory ve složce postupně a chtěl bys to tam vložit naráz? Pak si můžeš všechny informace v cyklu někam ukládat a nakonec sestavit hromadné vložení.
4ever
Profil
djlj:
Nebo tím myslíš to, že vkládáš do databáze všechny soubory ve složce postupně a chtěl bys to tam vložit naráz? Pak si můžeš všechny informace v cyklu někam ukládat a nakonec sestavit hromadné vložení.

Ano, tak jsem to myslel. Jak sestavit ten hromadný dotaz pro všechny řádky? Nikdy jsem to nedělal. Díky
o_O
Profil
$sqlPrikaz=array();
while(...){
$sqlPrikaz[]='(...)';
}
mysql_query("INSERT INTO tabulka (...) VALUES ".implode(",",$sqlPrikaz));


Vytvoříš si pole, do kterého budeš ukládat hodnoty tak, jako by jsi je psal do SQL příkazu. Pak je pomocí funkce implode() vložíš do mysql_query().
djlj
Profil
Mrkni sem: http://dev.mysql.com/doc/refman/5.5/en/insert.html
INSERT INTO tbl_name (a,b,c) VALUES(1,2,3),(4,5,6),(7,8,9);
4ever
Profil
o_O:
Akorád, že já to pole připravím už v tom cyklu pro získání dat. Takže je to takhle jednoduché. Díky
o_O
Profil
4ever:
Akorád, že já to pole připravím už v tom cyklu pro získání dat
Takto jsem to také myslel.
4ever
Profil
Teď jsem si ale uvědomil, že to asi nebude tak jednoduché. Ještě musím ověřit jestli daný soubor není zapsaný v databázi.

Prý se na to dá použít "INSERT IGNORE INTO...".
djlj
Profil
Jojo, použij tohle, pak to projde.
4ever
Profil
Ještě nevím jak nastavit klíče tabulky. Jestli mám dát sloupce cesta+soubor jako primární klíč, ale co sloupec id? id auto_increment, unique? Sloupce cesta+soubor musí být jedinečné v tom smyslu, že když např. "/obrazky/nature/"+"flower.010.jpg" (odpovídá sloupcům cesta+soubor) již je v databázi, musí to vrátit chybu, že klíč už existuje nebo něco takového.
djlj
Profil
Nastav na cestu se souborem unikátní klíč, to by mělo v pohodě zajistit, že tam bude každý soubor jen jednou. Na ID si nastav auto_increment, pokud s tím pak chceš dál pracovat třeba v nějaké administraci - předávat si v odkazu id je jednodušší než tam cpát celou adresu souboru.
4ever
Profil
djlj:
Nastav na cestu se souborem unikátní klíč, to by mělo v pohodě zajistit, že tam bude každý soubor jen jednou.

Jo, problém je právě v tom, že se nejedná o např. path="obrazky/nature/soubor.jpg" ale o dva sloupce path="obrazky/nature/"+"soubor.jpg"
djlj
Profil
Však UNIQUE jde nastavit i na víc sloupců - nastav jeden klíč na oba sloupce ;).
4ever
Profil
OK, zkusím. Nastavit klíč na 20. sloupec nejde? Musím to teda přesunout?
4ever
Profil
Error

SQL query: Edit

ALTER TABLE `info` ADD UNIQUE (
`html` ,
`common_path`
);

MySQL said: Documentation
#1170 - BLOB/TEXT column 'html' used in key specification without a key length


Co to znamená?
djlj
Profil
?! Důvod chyby tam máš napsaný. Změň si u toho typ sloupce. Na název souboru nepotřebuješ TEXT nebo BLOB.
4ever
Profil
OK dík

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