[ Príspevkov: 16 ] 
AutorSpráva
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 22.03.07
Prihlásený: 04.07.14
Príspevky: 344
Témy: 97 | 97
NapísalOffline : 25.06.2012 17:44 | Duplicitne zaznamy

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


Offline

Správca fóra
Správca fóra
Duplicitne zaznamy

Registrovaný: 27.07.07
Príspevky: 3948
Témy: 51 | 51
Bydlisko: Bratislava
NapísalOffline : 25.06.2012 20:21 | Duplicitne zaznamy

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
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 22.03.07
Prihlásený: 04.07.14
Príspevky: 344
Témy: 97 | 97
Napísal autor témyOffline : 26.06.2012 8:29 | Duplicitne zaznamy

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.. :rolleyes:


Offline

Správca fóra
Správca fóra
Duplicitne zaznamy

Registrovaný: 27.07.07
Príspevky: 3948
Témy: 51 | 51
Bydlisko: Bratislava
NapísalOffline : 26.06.2012 9:19 | Duplicitne zaznamy

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
Offline

Skúsený užívateľ
Skúsený užívateľ
Duplicitne zaznamy

Registrovaný: 29.10.07
Prihlásený: 27.10.23
Príspevky: 1395
Témy: 30 | 30
Bydlisko: Bratislava
NapísalOffline : 26.06.2012 13:15 | Duplicitne zaznamy

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
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 22.03.07
Prihlásený: 04.07.14
Príspevky: 344
Témy: 97 | 97
Napísal autor témyOffline : 26.06.2012 18:20 | Duplicitne zaznamy

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??


Offline

Správca fóra
Správca fóra
Duplicitne zaznamy

Registrovaný: 27.07.07
Príspevky: 3948
Témy: 51 | 51
Bydlisko: Bratislava
NapísalOffline : 26.06.2012 20:23 | Duplicitne zaznamy

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
Offline

Skúsený užívateľ
Skúsený užívateľ
Duplicitne zaznamy

Registrovaný: 29.10.07
Prihlásený: 27.10.23
Príspevky: 1395
Témy: 30 | 30
Bydlisko: Bratislava
NapísalOffline : 27.06.2012 7:53 | Duplicitne zaznamy

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
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 22.03.07
Prihlásený: 04.07.14
Príspevky: 344
Témy: 97 | 97
Napísal autor témyOffline : 27.06.2012 8:51 | Duplicitne zaznamy

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.


Offline

Správca fóra
Správca fóra
Duplicitne zaznamy

Registrovaný: 27.07.07
Príspevky: 3948
Témy: 51 | 51
Bydlisko: Bratislava
NapísalOffline : 27.06.2012 11:52 | Duplicitne zaznamy

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
Offline

Skúsený užívateľ
Skúsený užívateľ
Duplicitne zaznamy

Registrovaný: 29.10.07
Prihlásený: 27.10.23
Príspevky: 1395
Témy: 30 | 30
Bydlisko: Bratislava
NapísalOffline : 28.06.2012 11:59 | Duplicitne zaznamy

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
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 22.03.07
Prihlásený: 04.07.14
Príspevky: 344
Témy: 97 | 97
Napísal autor témyOffline : 28.06.2012 15:12 | Duplicitne zaznamy

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??


Offline

Správca fóra
Správca fóra
Duplicitne zaznamy

Registrovaný: 27.07.07
Príspevky: 3948
Témy: 51 | 51
Bydlisko: Bratislava
NapísalOffline : 29.06.2012 10:25 | Duplicitne zaznamy

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
Offline

Skúsený užívateľ
Skúsený užívateľ
Duplicitne zaznamy

Registrovaný: 29.10.07
Prihlásený: 27.10.23
Príspevky: 1395
Témy: 30 | 30
Bydlisko: Bratislava
NapísalOffline : 29.06.2012 10:43 | Duplicitne zaznamy

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
Offline

Správca fóra
Správca fóra
Duplicitne zaznamy

Registrovaný: 27.07.07
Príspevky: 3948
Témy: 51 | 51
Bydlisko: Bratislava
NapísalOffline : 29.06.2012 10:56 | Duplicitne zaznamy

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
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 22.03.07
Prihlásený: 04.07.14
Príspevky: 344
Témy: 97 | 97
Napísal autor témyOffline : 01.07.2012 18:24 | Duplicitne zaznamy

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... ;)


 [ Príspevkov: 16 ] 


Duplicitne zaznamy



Podobné témy

 Témy  Odpovede  Zobrazenia  Posledný príspevok 
V tomto fóre nie sú ďalšie neprečítané témy.

Ako vymazať duplicitné záznamy podľa podmienky

v Databázy

3

549

19.06.2018 10:22

SuchSoft

V tomto fóre nie sú ďalšie neprečítané témy.

V tabulke sa neobjavia nove zaznamy

v Backend

20

1037

10.01.2010 18:40

WebScript

V tomto fóre nie sú ďalšie neprečítané témy.

duplicitne ucty

v Kôš

5

79

01.02.2016 11:32

valala

V tomto fóre nie sú ďalšie neprečítané témy.

duplicitne Cookies

v Backend

5

476

09.12.2011 16:04

emer

V tomto fóre nie sú ďalšie neprečítané témy.

Windows 7 - duplicitné procesy

v Windows

5

617

01.06.2011 18:53

Denco1

V tomto fóre nie sú ďalšie neprečítané témy.

duplicitne ikony na ploche

v Windows

4

583

29.09.2011 9:09

sliki55

V tomto fóre nie sú ďalšie neprečítané témy.

Databáza, duplicitné hodnoty, vybrať len jednu

v Backend

2

324

25.07.2012 12:56

DeiForm

V tomto fóre nie sú ďalšie neprečítané témy.

DNS zaznamy - modifikacia pre www a mail s SSL certifikatmi na externom serveri doma.

v Hosting, servery a domény

2

894

11.03.2021 9:47

Jusufs

V tomto fóre nie sú ďalšie neprečítané témy.

Duplicitné osobné priečinky na navigačnom table Outlok 2003

v Sieťové programy

0

620

09.06.2009 23:01

Jany1953

V tomto fóre nie sú ďalšie neprečítané témy.

stara tema, miesanie sa do cudzej, duplicitne otazky

v Kôš

1

55

11.08.2016 18:45

brmbo



© 2005 - 2026 PCforum, edited by JanoF