| | |
| Stránka: 1 z 1
| [ Príspevkov: 16 ] | |
Autor | Správa |
---|
Registrovaný: 22.03.07 Prihlásený: 04.07.14 Príspevky: 344 Témy: 97 |
Nazdarek. Vytvoril som si celect z 2 tabuliek kde v tabulka1 su udaje o uzivateloch a v tabulka2 su fotky uzivatelov. Select vyzera nasledovne:
Kód: $selectUsers=mysql_query("SELECT tabulka1.id_uzivatel, tabulka1.krajina, tabulka2.fotka FROM tabulka1 left join tabulka2 on tabulka1.id_uzivatel = tabulka2.id_uzivatel WHERE tabulka1.krajina='SK' ORDER BY tabulka1.uzivatel"); Toto funguje dobre /zobrazi mi zoznam vsetkych uzivatelov/ az na jeden maly detail. Totiz ak ma uzivatel v tabulka2 Viac fotiek, tak aj vo vysledkoch sa tento uzivatel zobrazi viackrat.. No a to by som potreboval odstranit. Teda aby mi kazdeho uzivatela /bez ohladu na to kolko fotiek ma v tabulka2/ zobrazilo iba raz.. Skusal som to upravit pomocou GROUP BY Kód: $selectUsers=mysql_query("SELECT tabulka1.id_uzivatel, tabulka1.krajina, tabulka2.fotka FROM tabulka1 left join tabulka2 on tabulka1.id_uzivatel = tabulka2.id_uzivatel WHERE tabulka1.krajina='SK' GROUP BY tabulka1.id_uzivatel ORDER BY tabulka1.uzivatel"); a aj pomocou GROUP_CONCAT Kód: $selectUsers=mysql_query("SELECT tabulka1.id_uzivatel, tabulka1.krajina, tabulka2.fotka GROUP_CONCAT(tabulka1.id_uzivatel) FROM tabulka1 left join tabulka2 on tabulka1.id_uzivatel = tabulka2.id_uzivatel WHERE tabulka1.krajina='SK' ORDER BY tabulka1.uzivatel");
no ani jeden spôsob mi nefungoval.
Neviete mi poradit ako upravit ten select aby som dostal pozadovany vysledok?
Dakujem
|
|
Registrovaný: 27.07.07 Príspevky: 3948 Témy: 51 Bydlisko: Bratislava |
a ako ma vyzerat pozadovany vysledok? zaujimaju ma hlavne tie fotky - len 1 fotka sa ma vyselektovat ci ako?
_________________ NTB: Acer Aspire 4820TG 14" | CPU: Intel Core i5 2,53 GHz | VGA: ATI Mobility Radeon HD5650 1GB | RAM: 8GB DDR3 1066 MHz | HDD: 1TB SSD WD BLUE |
|
Registrovaný: 22.03.07 Prihlásený: 04.07.14 Príspevky: 344 Témy: 97 | Napísal autor témy newboy1: 26.06.2012 8:29 | |
|
Skusim to pre lepsie pochopenie nejako znazornit:
V tabulka1 mam zoznam registrovanych uzivatelov. V skratke:
id- id_uzivatela- meno- krajina
1-us1-JozefJ-SK
2-us2-PeterP-SK
3-us3-MartinM-SK
4-us4-LiborL-CZ
5-us5-DagmarD-CZ
A tabulka2 obsahuje nazvy fotiek registrovanych uzivatelov /ktori si tie fotky pridali - tych fotiek moze byt pre kazdeho uzivatela n-pocet/
id- id_uzivatela- meno- fotka
1-us1-JozefJ-fotkaJ1.jpg
2-us1-JozefJ-fotkaJ2.jpg
3-us1-JozefJ-fotkaJ3.jpg
4-us2-PeterP-fotkaP1.jpg
5-us5-DagmarD-fotkaD1.jpg
6-us5-DagmarD-fotkaD2.jpg
No a pri mojom selecte (ten ktory som uviedol v prvom prispevku) je vysledok takyto:
1.JozefJ - SK
2.JozefJ - SK
3.JozefJ - SK
4.PeterP - SK
5.MartinM - SK
6.LiborL - CZ
7.DagmarD - CZ
8.DagmarD - CZ
Cize mi to vlastne vypise 8 uzivatelov aj ked v skutocnosti ich je iba 5. A moj pozadovany vysledok by mal byt:
1.JozefJ - SK
2.PeterP - SK
3.MartinM - SK
4.LiborL - CZ
5.DagmarD - CZ
Ja jednoducho potrebujem vytvorit zoznam registrovanych uzivatelov s tym ze pri samotnom zobrazeni (zozname) bude pri uzivatelovi ktory ma pridane nejake fotky (a teda sa nachadza v tabulka2) zobrazena aj jedna jeho fotka.
Uf..dufam ze je to aspon trocha jasnejsie..
|
|
Registrovaný: 27.07.07 Príspevky: 3948 Témy: 51 Bydlisko: Bratislava |
Toto by malo fungovat (vrati vsetkych registrovanych aj s fotkou, ak nejaku maju)
Kód: SELECT id_uzivatel, krajina, fotka FROM tabulka1 t1 LEFT JOIN tabulka2 t2 USING(id_uzivatel) GROUP BY id_uzivatel
ale tak sa mi zda, ze si to uz skusal, len si neuviedol, preco ti to nefungovalo...
_________________ NTB: Acer Aspire 4820TG 14" | CPU: Intel Core i5 2,53 GHz | VGA: ATI Mobility Radeon HD5650 1GB | RAM: 8GB DDR3 1066 MHz | HDD: 1TB SSD WD BLUE |
|
Registrovaný: 29.10.07 Prihlásený: 27.10.23 Príspevky: 1395 Témy: 30 Bydlisko: Bratislava |
Je to normalen fungovanie databaz ze ti zaznamy rozmnozi... ak chces vidiet len jednu z fotiek, databaza si nema ako sama vymysliet ktoru. Musis jej to povedat. Jednoduche MIN ti to zabezpeci, ale vyberat to bude fotku ktora je prva po abecednom zoradeni podla nazvu. Mozno chces prvu, alebo poslednu... potom by vyber trochu zlozitejsi a budes tam potrebovat aj cas pre kazdu fotku.
_________________ PC: OS: Windows 11 (64bit) CPU: AMD Ryzen 5 3600 GPU: ASUS TUF RTX3060Ti 8GB RAM: 16GB DDR4-3200MHz Kingston Fury MB: ASUS TUF Gaming B550M WIFI SSD: 1000GB PCIe M.2 NVME Mobil: Xiaomi POCO F2 PRO |
|
Registrovaný: 22.03.07 Prihlásený: 04.07.14 Príspevky: 344 Témy: 97 | Napísal autor témy newboy1: 26.06.2012 18:20 | |
|
Toto:
Kód: $selectUsers=mysql_query("SELECT tabulka1.id_uzivatel, tabulka1.krajina, tabulka2.fotka FROM tabulka1 left join tabulka2 on tabulka1.id_uzivatel = tabulka2.id_uzivatel USING (tabulka1.id_uzivatel) WHERE tabulka1.krajina='SK' GROUP BY tabulka1.id_uzivatel ORDER BY tabulka1.uzivatel"); ani toto: Kód: $selectUsers=mysql_query("SELECT tabulka1.id_uzivatel, tabulka1.krajina, MIN(tabulka2.fotka) AS 'fotka' FROM tabulka1 left join tabulka2 on tabulka1.id_uzivatel = tabulka2.id_uzivatel WHERE tabulka1.krajina='SK' ORDER BY tabulka1.uzivatel");
nefunguje..A netusim preco..
GoodWill -> s tymi fotkami..ak jedna z tych fotiek by mala oznacenie napr. "hlavna" (alebo bola inac rozlisena od ostatnych) ako by sa dala ta "tvoja myslienka" zrealizovat resp, prepisat do toho selectu??
|
|
Registrovaný: 27.07.07 Príspevky: 3948 Témy: 51 Bydlisko: Bratislava |
tvoj pozadovany vysledok nemoze byt 5 uzivatelov, lebo v sql mas podmienku, ze ti ma vratit len tych, ktorych krajina je SK, takze stale nechapem, co ti na tom nejde, ked mne to funguje bez problemov (podla tvojho popisu), teda vysledok je:
us1-SK-fotkaJ1.jpg
us2-SK-fotkaP1.jpg
us3-SK-NULL
PS: podla struktury, co si sem dal, tabulka1.uzivatel neexistuje
_________________ NTB: Acer Aspire 4820TG 14" | CPU: Intel Core i5 2,53 GHz | VGA: ATI Mobility Radeon HD5650 1GB | RAM: 8GB DDR3 1066 MHz | HDD: 1TB SSD WD BLUE |
|
Registrovaný: 29.10.07 Prihlásený: 27.10.23 Príspevky: 1395 Témy: 30 Bydlisko: Bratislava |
Priznak "hlavna" ma svoje pre aj proti...
plusom je, ze vybery budu jednoduche (staci do where podmienky pridat AND hlavna = 1
minusom ale je, ze sa budes musiet starat o to aby tento priznak mala vzdy prave jedna fotka
_________________ PC: OS: Windows 11 (64bit) CPU: AMD Ryzen 5 3600 GPU: ASUS TUF RTX3060Ti 8GB RAM: 16GB DDR4-3200MHz Kingston Fury MB: ASUS TUF Gaming B550M WIFI SSD: 1000GB PCIe M.2 NVME Mobil: Xiaomi POCO F2 PRO |
|
Registrovaný: 22.03.07 Prihlásený: 04.07.14 Príspevky: 344 Témy: 97 | Napísal autor témy newboy1: 27.06.2012 8:51 | |
|
OK..mozno som sa zle vyjadril tak to skusim napisat inac. Mame tabulka1 v ktora obsahuje udaje o registrovanych uzivateloch ako napr. id, meno, krajina, pohlavie, vek atd. A mame tabulka2, ktora obsahuje fotky uzivatelov. Nie vsetci uzivatelia maju fotky a niektory uzivatelia tych fotiek maju viac.. A uloha znie:
Vytvorit zoznam (list) uzivatelov kde v pripade ak maju nejaku fotku / a teda sa nachadzaju v tabulka2/ tak pre tohto uzivatela vyberieme 1 fotku a nasledne ju aj zobrazime.
Cize ide o klasicke vyhladavanie /a zobrazenie / uzivatelov s podmienkami typu (pochadza z SK, ma fotku/nema fotku, je to zena/muz) ..proste tie podmienky si navstevnik navoli vo formulary.
No a ja mam problem s tym (selecty ktore som uviedol v predch. prispevkoch), ze ak ma uzivatel "Jozko J" viacero fotiek napr.3 , tak v zozname uzivatelov sa mi meno"Jozko J" zobrazi 3 krat. A to prave nechcem. Kazdeho uzivatela chcem mat v zozname iba raz.
Dufam, ze je to aspon o troska jasnejsie co chcem docielit.
|
|
Registrovaný: 27.07.07 Príspevky: 3948 Témy: 51 Bydlisko: Bratislava |
Riesenie tvojho problemu tu uz mas uvedene.
_________________ NTB: Acer Aspire 4820TG 14" | CPU: Intel Core i5 2,53 GHz | VGA: ATI Mobility Radeon HD5650 1GB | RAM: 8GB DDR3 1066 MHz | HDD: 1TB SSD WD BLUE |
|
Registrovaný: 29.10.07 Prihlásený: 27.10.23 Príspevky: 1395 Témy: 30 Bydlisko: Bratislava |
Ano, jasne to je... vieme co potrebujes. Ale zamysli sa nad tym sam. Ak su tam 3 fotky, tak ktoru chces vidiet? Databaza si len tak sama nevyberie, musis jej oznamit ktora fotka ta zaujima.
_________________ PC: OS: Windows 11 (64bit) CPU: AMD Ryzen 5 3600 GPU: ASUS TUF RTX3060Ti 8GB RAM: 16GB DDR4-3200MHz Kingston Fury MB: ASUS TUF Gaming B550M WIFI SSD: 1000GB PCIe M.2 NVME Mobil: Xiaomi POCO F2 PRO |
|
Registrovaný: 22.03.07 Prihlásený: 04.07.14 Príspevky: 344 Témy: 97 | Napísal autor témy newboy1: 28.06.2012 15:12 | |
|
Takze toto mi funguje:
Kód: SELECT id_uzivatel, uzivatel, krajina, fotka FROM tabulka1 t1 LEFT JOIN tabulka2 t2 USING(id_uzivatel, uzivatel) GROUP BY id_uzivatel Problem bol v tom ze obe tabulky mali 2 spolocnych menovatelov a to id_uzivatel a uzivatel. No ked do tohto selectu zapracujem podmienku: Kód: SELECT id_uzivatel, uzivatel, krajina, fotka FROM tabulka1 t1 LEFT JOIN tabulka2 t2 USING(id_uzivatel, uzivatel) WHERE t2.fotka='hlavna' GROUP BY id_uzivatel
tak mi to zobrazi iba uzivatelov, ktori maju fotku. Ako to mam upravit aby mi to zobrazovalo vsetkych uzivatelov a pri tych uzivateloch ktori maju fotku, tak bola vybrana iba ta fotka, ktora ma oznacenie ako hlavna??
|
|
Registrovaný: 27.07.07 Príspevky: 3948 Témy: 51 Bydlisko: Bratislava |
Vysledok selectu bez group by musis zoradit tak, aby useri s fotkami oznacenymi ako hlavna boli uvedeni skor ako ti, ktori take fotky nemaju, resp. nemaju ziadne fotky - takto ziskany zoznam uz len zgrupis, aby sa ti useri neopakovali a mas to...
_________________ NTB: Acer Aspire 4820TG 14" | CPU: Intel Core i5 2,53 GHz | VGA: ATI Mobility Radeon HD5650 1GB | RAM: 8GB DDR3 1066 MHz | HDD: 1TB SSD WD BLUE |
|
Registrovaný: 29.10.07 Prihlásený: 27.10.23 Príspevky: 1395 Témy: 30 Bydlisko: Bratislava |
Nemozes dat tu podmienku do WHERE, lebo potom LEFT JOIN zacne fungovat ako INNER JOIN.
Navyse, kedze uz mas v podmienke ze vyberas len hlavnu fotku, tak group by nepotrebujes.
Spravne to ma byt takto:
Kód: SELECT id_uzivatel, uzivatel, krajina, fotka FROM tabulka1 t1 LEFT JOIN tabulka2 t2 ON t2.id_uzivatel = t1.id_uzivatel AND t2.fotka = 'hlavna'
_________________ PC: OS: Windows 11 (64bit) CPU: AMD Ryzen 5 3600 GPU: ASUS TUF RTX3060Ti 8GB RAM: 16GB DDR4-3200MHz Kingston Fury MB: ASUS TUF Gaming B550M WIFI SSD: 1000GB PCIe M.2 NVME Mobil: Xiaomi POCO F2 PRO |
|
Registrovaný: 27.07.07 Príspevky: 3948 Témy: 51 Bydlisko: Bratislava |
treba vsak mysliet aj na ten pripad, ze user sice bude mat nahrate nejake fotky, ale ziadnu nebude mat oznacenu ako hlavna, pripadne ich bude mat oznacenych viac (zle osetrenie a pod) - samozrejme, ak to nie je dolezite, tvoje riesenie je spravne
_________________ NTB: Acer Aspire 4820TG 14" | CPU: Intel Core i5 2,53 GHz | VGA: ATI Mobility Radeon HD5650 1GB | RAM: 8GB DDR3 1066 MHz | HDD: 1TB SSD WD BLUE |
|
Registrovaný: 22.03.07 Prihlásený: 04.07.14 Príspevky: 344 Témy: 97 | Napísal autor témy newboy1: 01.07.2012 18:24 | |
|
GoodWill, neviem preco ale ak som pouzil presne tvoj kod, tak to sice fungovalo, ale nejako mi to okrem id_uzivatel nechcelo zobrazovat ostatne udaje. Ale ako vzor je tento kod dobry. Po uprave :
Kód: SELECT t1.id_uzivatel, t1.uzivatel, t1.krajina, t1.fotka FROM tabulka1 AS t1 LEFT JOIN tabulka2 AS t2 ON t1.id_uzivatel = t2.id_uzivatel AND t2.fotka = 'hlavna' WHERE NOT(t1.id_uzivatel='$uzivatelID') ORDER BY t1.uzivatel ASC
to funguje presne ako potrebujem..Teda aspon myslim ze to funguje, tak ako ma..Zobrazuje to vsetkych uzivatelov ci uz ma fotky alebo nie, alebo ak nema ziadnu fotku oznacenu ako hlavnu, tak ho zobrazi bez fotky..Cize presne ako potrebujem a bez duplicit...
Dakujem za rady
PS: AK je v tom selecte nejaka chyba, resp. "nejake potencionalne riziko", prosim, upravte mi to, alebo ma na to upozornite.
Este raz vdaka...
|
|
| Stránka: 1 z 1
| [ Príspevkov: 16 ] | |
| Nemôžete zakladať nové témy v tomto fóre Nemôžete odpovedať na témy v tomto fóre Nemôžete upravovať svoje príspevky v tomto fóre Nemôžete mazať svoje príspevky v tomto fóre
|
|