Autor | Zpráva | ||
---|---|---|---|
mata.lan Profil * |
#1 · Zasláno: 4. 5. 2008, 23:33:19
Mám tabulku, v níž je cca 100tis. řádků, každý řádek je specifický při kombinaci sloupců PartNb a Dodavatel. Samozřejmě více dodavatelů může mít položku se stejným PartNb. Já z této tabulky potřebuji udělat druhou, ve které bude každé PartNb zastoupeno už jen jednou a ostatní položky budou vybrány od různých dodavatelů, pokud je dostupný. Zároveň u každého řádku vznikne řádek v jiné tabulce, kde bude zapsáno, která položka se vybrala od kterého dodavatele. Jak by jste tohle řešili? Vlezlo by se to do jednoho dotazu?
MySql, PHP Já to zatím řeším pomocí cyklu, v každém je několik podmínek a přesně 4 dotazy. Celý proces trvá řádově několik minut. Tabulka původní: Číslo PartNb Dodavatel Ostatní sloupce 1 MD400AD256 A-Data Možnost1 Možnost1 Možnost1 Možnost1 2 MD400AD256 multiplex Možnost2 Možnost2 Možnost2 Možnost2 3 MD400AD256 Flextron Možnost3 Možnost3 Možnost3 Možnost3 Tabulka dodavatelů PartNb Ostatní sloupce MD400AD256 A-Data multiplex Flextron multiplex Výsledná tabulka PartNb Ostatní sloupce MD400AD256 Možnost1 Možnost2 Možnost3 Možnost2 |
||
Joker Profil |
#2 · Zasláno: 5. 5. 2008, 08:39:14
ve které bude každé PartNb zastoupeno už jen jednou a ostatní položky budou vybrány od různých dodavatelů, pokud je dostupný
Není mi úplně jasné, jak přesně má fungovat tahle podmínka. |
||
widlak Profil |
#3 · Zasláno: 5. 5. 2008, 09:10:43 · Upravil/a: widlak
Skus sa pohrat s konstrukciou: INSERT INTO table2 SELECT DISTINCT PartnNb FROM table1. Je to len taky napad, na zaklade popisu problemu neviem jednoznacne povedat ci bude pouzitelne taketo riesenie.
|
||
mata.lan Profil * |
#4 · Zasláno: 5. 5. 2008, 21:18:42
Jde o to, že jeden produkt (PartNb) může být zastoupen u více dodavatelů, ale taky třeba jen u jednoho. A chci kopírovat data do různých sloupců od různých dodavatelů. Tak například sloupec1 - pokud ten produkt je v nabídce u dodavatele1, tak vzít údaje od něj, pokud tam není, tak vzít údaje od dodavatele2 atd... Sloupec2 chci pak například plnit prvotně údaji od dodavatele2, až pak od dodavatele1
to widlak pomocí tohoto dotazu by se nejdříve dalo vybrat všechny PartNb, které nejsou obsaženy ve výsledné tabulce a vložit základní údaje a teprve potom kontrolovat, jestli by se daly doplnit údaji od jiného dodavatele. Ale co takhle to nacpat do jednoho dotazu? "INSERT INTO table2 SELECT DISTINCT PartnNb FROM table1 ON DUPLICATE KEY UPDATE " - tady by musely být vybrány data - " WHERE table2.PartnNb=table1.PartnNb" Ale nevím, jak tam navybírat ty data. Například u sloupce1 vím, že první mám vybírat od dodavatele1, pak od dodavatele2 a nakonec od dodavatele3. Takže dotaz by zjistil, jestli to PartNb je u dodavatele1, když jo, použil by sloupec1 od něj, v opačnym případě by vyzkoušel dalšího dodavatele. |
||
mata.lan Profil * |
#5 · Zasláno: 5. 5. 2008, 21:24:56
Teď vidím, že sem napsal kravinu, splantal sem dvě myšlenky dohromady.
Buď by to bylo jak psal joker, ale nevím, jak by se tam vybíraly data z jiných řádků. "INSERT INTO table2 SELECT DISTINCT PartnNb FROM table1" anebo bez použití DISTINCT. Dotaz by se provedl pro každý řádek a údaje by updatoval jen v případě, že by byly od preferovanějšího dodavatele "INSERT INTO table2 SELECT PartnNb FROM table1 ON DUPLICATE KEY UPDATE " - tady by musely být vybrány data - " WHERE table2.PartnNb=table1.PartnNb" |
||
Časová prodleva: 16 let
|
0