Kategorie a podkategorie v jednom sloupci - rozdělení do dvou sloupců – MS SQL – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Kategorie a podkategorie v jednom sloupci - rozdělení do dvou sloupců – MS SQL – Fórum – Programujte.comKategorie a podkategorie v jednom sloupci - rozdělení do dvou sloupců – MS SQL – Fórum – Programujte.com

 

Petr
~ Anonymní uživatel
746 příspěvků
15. 12. 2017   #1
-
0
-

Dobrý den, mám následující tabulku:

sloupec1     slupec2     sloupec..n

kategorie    A123          ...........

podkateg    B547          ...........

podkateg    B587          ............

kategorie    A854          ...........

podkateg    B142          ............

podkateg    B241           ............

podkateg    B214           ............

...........        ...........        ...........

Vím, že začáteční písmena ve druhém sloupci  jsou A pro kategorii a B pro podkategorii, a že do každé kategorie patří podkategorie vypsané v dalších řádcích, až po další kategorii.

Potřeboval bych rozdělit data tak, aby pro každou podkategorii byla v řádku informace do které spadá kategorie, tzn.:

kategorie   A123    podkategorie  B547

kategorie   A123    podkategorie  B587 ........ atd

Neřešili jste prosím Vás někdy něco podobného?

Děkuji za případné rady.

Nahlásit jako SPAM
IP: 185.150.124.–
peter
~ Anonymní uživatel
4014 příspěvků
15. 12. 2017   #2
-
0
-

??? Jakoze, v te tabulce to mas ve spravnem poradi? Nazev kategorie a pod ni jen jeji polozky? A kdyz se objevi dalsi nazev, tak opet jen jeji polozky? To se mi moc nezda, ze by to sql takto umoznila ukladat (proto ty otazniky na zacatku). Leda, ze bys to ukladal jako celou tabulku najednou.

V php bych to filtroval tak, ze
if ($row['sloupec1'] == 'kategorie')  {$tmp = $row['sloupec2']; $row['a'] = $tmp; $row['b'] = ''; }
else {$row['a'] = $tmp; $row['b'] = $row['sloupec2'];}

V sql by se dala udelat procedura nebo vyuzit pocitani radku (COUNT).

Nahlásit jako SPAM
IP: 2001:718:2601:258:dd28:2d...–
peter
~ Anonymní uživatel
4014 příspěvků
15. 12. 2017   #3
-
0
-

Jakoze neco takoveho

Select1 vse
1 kategorie1    A123          ........... count
2 podkateg    B547          ...........
3 podkateg    B587          ............
4 kategorie2    A854          ...........
5 podkateg    B142          ............
6 podkateg    B587          ............
7 kategorie3    A854          ...........
 

Select2 kategorie
1 1 1 kategorie1 ...........  count%2+1 count%2
2 1 4 kategorie2
2 2 7 kategorie3

Select3 kategorie group podle sloupec 0 a podle sloupec 1
- z radku 0, vemes id
- z radku 0 vemes sloupec 3
- z radku 1 vemes sloupec 3
Mas tak tabulku rozpeti cisla radku
1 4 kategorie1    A123          ...........  count%2+1 count%2
4 7 kategorie2   A854          ...........
7 - kategorie3    A854          ...........

A pak z puvodni tabulky to jenom vycucas, pro kazdy zaznam.
Ale prijde mi to jako slozity sql dotaz. Treba nekdo prijde s necim lepsim. Nebo mozna ta procedura ci php.

Nahlásit jako SPAM
IP: 2001:718:2601:258:dd28:2d...–
peter
~ Anonymní uživatel
4014 příspěvků
15. 12. 2017   #4
-
0
-

ups, blbost count%2+1 count%2
myslel jsem tak, abys dostal n>>1 a n>>1+1. (n shift right 1 nebo floor(n/2))

Nahlásit jako SPAM
IP: 2001:718:2601:258:dd28:2d...–
Petr
~ Anonymní uživatel
746 příspěvků
15. 12. 2017   #5
-
0
-

#2 peter

Mám vstupní tabulku v .csv  - kde vím že pořadí tomu co jsem popisoval.

Tu natáhnu přes integračky do databáze. Předpokládal jsem, že pořadí řádků by mělo zůstat stejné nebo se pletu?

Díky

Nahlásit jako SPAM
IP: 185.150.124.–
peter
~ Anonymní uživatel
4014 příspěvků
15. 12. 2017   #6
-
0
-

A ty to potrebujes jednorazove nebo opakovane? Totiz, by sis to mohl ocislovat v excelu a zkonvertovat do csv. Nebo v tom php a ulozit si to treba zpet jako csv.
Nevim, co je 'integračky', mssql nepouzivam.

Ten Select2 to cisluje (COUNT(id)>>1 AS sloupec0) tak, ze

sloupec0: 1 1 2 2 3 3 4 4 ... (mozna to zacina 0)
sloupec1: 1 2 2 3 3 4 4 5 ...
sloupec2: 1 4 7 ... (cislo radku, na kterem je radek s kategorii)
sl.3 (popisek): kategorie1, kategorie2, kategorie3 ...

Cili, kdyz das grupovani podle sloupce 1, dostanes
kategorie1-kategorie2
kategorie3-kategorie4 ...
A kdyz k tomu UNIONem pridas grupovani pres sloupec 1, zase dostanes
kategorie2-kategorie3
kategorie4-kategorie5 ...
Takze dostanes prave to rozpeti skupin kategorii, seznam radku podkategorie, ktera do skupiny patri. Ale celkove je to teda slozity dotaz a nevim, jak dlouho ho bude delat pro 100 polozek, treba. Tim php uz prave generujes primo vystup.
Cili jo, je to mozne udelat i sql dotazem nebo sql procedurou, kdyz se ptas tedy na forku o sql dotazech. Jen nevim, zda neexistuje nejaka vestavena jednodussi varianta, ja jsem spis programator. Kdyz neco nevim, vytvorim si to :)

Jo, nevim, zda sql umi shifty, ale alternativa je floor(count(id)/2).
count(id)>>1 ... 0 0 1 1 2 2 ...
(count(id)+1)>>1 ... 0 1 1 2 2 3 ...

Nahlásit jako SPAM
IP: 2001:718:2601:258:dd28:2d...–
Petr
~ Anonymní uživatel
746 příspěvků
18. 12. 2017   #7
-
0
-

#6 peter

Potřebuji to právě automatizovat, proto to řeším až v sql a k úpravě vstupních dat přes php se nedostanu, mám pouze soubor v csv nic víc.

Jedná se o asi 1400 řádků takže to asi potrvá no. Vyzkouším Tvůj nápad a dám vědět jak to bude vypadat, díky za radu :)

Nahlásit jako SPAM
IP: 185.150.124.–
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, 3 hosté

 

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