Autor Zpráva
mata.lan
Profil *
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
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
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 *
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 *
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"

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