Co ze seznamu neni v databazi – MySQL – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Co ze seznamu neni v databazi – MySQL – Fórum – Programujte.comCo ze seznamu neni v databazi – MySQL – Fórum – Programujte.com

 

peter
~ Anonymní uživatel
3981 příspěvků
9. 3. 2015   #1
-
0
-

Mam seznam cisel, item_no, a potrebuji vybrat ty, ktere z toho seznamu nejsou v databazi. Jak na to?
item_no IN (seznam) - vybere ty, co jsou na seznamu a shoduji se s db
item_no NOT IN (seznam) - vybere ty, jsou v db, ale nejsou na seznamu
a ja potrebuji prave tu treti moznost, rozdil seznam a to, co je v db: seznam - item_no IN (seznam)

Nahlásit jako SPAM
IP: 2001:718:2601:1f7:2564:67...–
ondrej39+1
Věrný člen
9. 3. 2015   #2
-
0
-

#1 peter
Úplně první, co mě napadne, je except select, čímž se dá docílit toho, co chceš, ale možná to půjde jinak, efektivněji, s databázemi moc nedělám.

Nahlásit jako SPAM
IP: 195.113.207.–
Inject all the dependencies!
peter
~ Anonymní uživatel
3981 příspěvků
9. 3. 2015   #3
-
0
-

no, ja nasel, ze treba takto nejak 

$str    = implode("','",$files);

('".$str."') `a`
UNION DISTINCT
(SELECT `item_no` FROM `zbozi` WHERE `item_no` IN ('".$str."')) `b`

No, ale maler je, ze teda neumim napsat php pole jako array. Nebo, zatim nevim. A pak je tu ta potiz, ze souboru mam 70.000, takze jsem to chtel po 100, treba NOT IN () mi vyhodi vsechna cisla mimo pole, coz je dalsi problem, ze tam nektere nemaji soubory, treba.

Druha moznost je radek po radku. Coz mozna k tomu speje.

Treti moznost nabizi php jako array_unique nebo merge, ale to jsem dal nestudoval. Coz je zase zpet k obrim polim. To mozna pretece pamet.

Nahlásit jako SPAM
IP: 2001:718:2601:1f7:2564:67...–
peter
~ Anonymní uživatel
3981 příspěvků
9. 3. 2015   #4
-
0
-

Jo, takze array_diff to byl, ne unique, co bylo na tom forky. Mozna to pouziju. Ono to muzu po stovce porovnavat.

Nahlásit jako SPAM
IP: 2001:718:2601:1f7:2564:67...–
ondrej39+1
Věrný člen
10. 3. 2015   #5
-
0
-

#4 peter
A aktuálně máš ta čísla uložená kde? V nějakém textovém dokumentu?

Nahlásit jako SPAM
IP: 213.226.234.–
Inject all the dependencies!
peter
~ Anonymní uživatel
3981 příspěvků
10. 3. 2015   #6
-
0
-

Uz jsem to poresil pres to php asi nejak takto:


$files = array(123.jpg,...) // kde je prvnich 100 souboru
$files_no = array(123,...) // kde to je bez pripony
$str = implode("','",$files);
$q = SELECT `item_no` FROM `zbozi` WHERE `item_no` IN ('".$str."') ...
                while(($row = mysql_fetch_array($result))!==false)
                {
                $db[] = $row['item_no'];
                }
            mysql_free_result($result);
            $diff = array_merge($diff, array_diff($files_no,$db)); // po te 100 to pridavam postupne do pole

Problem je takovy, ze mam slozku, kde je 70.000 obrazku a potrebuju z tama vyhodit ty, ktere nemaji item_no v databazi. Nejen, ze jsem to omezil po te 100, ale jeste jsem tam dal max 1000 polozek, protoze limit POST je kolem 8MB, tak jsem to nechtel prehanet. Raci pocitam s mensim.

Nahlásit jako SPAM
IP: 2001:718:2601:1f7:d1a0:1b...–
P
~ Anonymní uživatel
212 příspěvků
10. 3. 2015   #7
-
0
-

Nevim jestli to v Tvych podminkach jde, ale muzes pouzit tento postup:

1. Vypsat seznam souboru do souboru - napr.

 dir *.jpg /B>files.txt

2. Nahrat ze souboru do tabulky v DB:

http://dev.mysql.com/doc/refman/5.1/en/load-data.html

3. Zpracovat v DB porovnanim 2 tabulek - WHERE ... NOT IN.
MySQL neumi EXCEPT.

Nahlásit jako SPAM
IP: 85.93.116.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 2 hosté

Podobná vlákna

C++ řazení seznamu — založil Petr

Práce seznamu — založil pouk

Iterace v seznamu — založil kterosuom

Zarovnání seznamu — založil UrbiCZ

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý