Diskuze: SELECT pro adresni stitky
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.

Člen

Zobrazeno 7 zpráv z 7.
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.
Domaci ukol? A tabulku 3 mas kde, ktera definuje propojeni?
tab1 (id_adresa, adresa)
tab2 (id_balik, balik)
tab3 (id_balik, id_adresa)
SELECT
tab1.balik,
tab2.adresa,
COUNT(tab3.id_adresa) AS pocet
FROM
tab3
LEFT JOIN tab1 ON tab1.id_balik=tab3.id_balik -- u toho ON mozna nejdriv tab3, pak tab1, pokud to nebude fungovat
LEFT JOIN tab2 ON tab2.id_balik=tab3.id_balik
Mno, ale jestli to mas jen takhle, tak to je celkem nic moc reseni. S tim se moc operovat neda.
tab1 (id_adresa, adresa)
tab2 (id_adresa, pocet)
Asi bys musel udelat nejakou proceduru, ktera vygeneruje pro kazdy pocet
individualni radek do temp tabulky a tu pak vratis uzivateli.
google = procedure clone row by cause
google = mysql procedure cycle cause example
Mohlo by to byt neco takoveho. Ale nikdy jsem to nedelal, tak jen upravuji,
co jsem nasel
DECLARE #temp_table(
id_adresa INT,
balik_cislo INT
)
SET @i = 1
SET @numrows = (SELECT COUNT(*) FROM tab2)
IF @numrows > 0
WHILE (@i <= @numrows)
BEGIN
SET @id_adresa = (SELECT id_adresa FROM tab2 LIMIT @i,1)
SET @pocet = (SELECT pocet FROM tab2 LIMIT @i,1)
SET @j = 1
IF @pocet > 0
WHILE (@j <= @pocet )
BEGIN
INSERT INTO temp_table (id_adresa, balik_cislo) VALUES (@id_adresa, @j)
SET @j = @j + 1
END
SET @i = @i + 1
END
SELECT FROM #temp_table LEFT JOIN... --- a select, kterym pak najoinujes udaje adres podle id
google = sql procedure foreach row
https://forums.asp.net/t/1207630.aspx?…
Urcite to jde i mene krkolomne, ale takovehle konstrukce nepouzivam, tak ti moc neporadim.
Tak nakonec jsem to vyresil nasloedovne:
zalozim novou tabulku max_baliku s max cislem poctu stitku treba 100 (tolik jich
nikdy nebude) a pouziju to v joinu:
SELECT adresy.ADRESA, max_baliku.PORADI, pocet_baliku.POCET FROM adresy
LEFT JOIN pocet_baliku ON pocet_baliku.CISLO_ZASILKY = adresy.CISLO_ZASILKY
LEFT JOIN max_baliku ON max_baliku.PORADI <= pocet_baliku.POCET
dulezite je to <= v poslednim joinu, to pak udela presne to co potrebuju. doda duplicitni radky vcetne poradi
jen upresnim, ze tabulka max_baliku obsahuje 100 radku (1-100) nikoli jen jedine cislo 100.
Zobrazeno 7 zpráv z 7.