Autor Zpráva
petrkolos
Profil
Ahoj, potřeboval bych poradit. Beru si data z tabulky senzory. Tam mám uložený data senzorů, ze kterých si pak beru hodnoty. Tyto senzory bych chtěl sdílet mezi ostatními uživateli systému. Problém je v tom že mám tabulku sdílení. Tam je uložený id uživatele a id senzoru, které má nasdílené. Při výpisu těchto senzorů se mi duplikují řádky viz níže. Díky za pomoc.


$id_skupiny_uzivatele = $_SESSION[id_skupiny_uzivatele_uzivatele];
$sql_senzory = " SELECT * FROM senzory 
 LEFT JOIN cidla ON cidla.id_cidla = senzory.id_cidla_senzory 
 LEFT JOIN merene_veliciny ON senzory.id_merene_veliciny_senzory = merene_veliciny.id_merene_veliciny 
 LEFT JOIN skupiny_cidla ON skupiny_cidla.id_skupiny_cidla = cidla.id_skupiny_cidla_cidla 
 LEFT JOIN sdileni ON sdileni.id_senzoru_sdileni = senzory.id_senzory 
 WHERE skupiny_cidla.id_skupiny_uzivatele_skupiny_cidla = '$id_skupiny_uzivatele'";

Pokud je v tabulce sdileni nasdíleno stejné čidlo pro více uživatelů začnou se řádky duplikovat.

Teploměr
Vlhkoměr
Teploměr
Vlhkoměr

Zkoušel jsem group by sdileni.id_sdileni ale to nefungovalo. Proto se obracím sem. Díky za pomoc.
Keeehi
Profil
petrkolos:
Předpokládám, že ta tabulka sdílení to má filtrovat. Pak nechceš LEFT JOIN ale (INNER) JOIN. A nebo to můžeš dát jako podmínku do WHERE. Napsal bych ti klidně dotaz jak má vypadat, ale nějak se nemohu vyznat v názvech těch sloupců. Pokud sem dáš ukázku dat (pár řádků z jednotlivých tabulek) ze které bude vidět, co s čím souvisí, pak bych to už měl zvládnout.
petrkolos
Profil
Keeehi:

Díky za rychlou odpověď.


Merene_veliciny
id---merena_velicina
1---Teplota
2---Vlhkost


Senzory
id_senzory---id_cidla_senzory---id_merene_veliciny_senzory---nazev_senzory
1---1---1---Teploměr obývák
2---1---2---Vlhkoměr obývák
3---2---1---Teploměr ložnice
4---3---2---Vlhkoměr někde


Cidla
id_cidla---id_skupiny_cidla_cidla---nazev_cidla
1---1---Měření v obývacím pokoji (Skupina Praha)
2---1---Měření v ložnici (Skupina Praha)
3---2---Měření v koupelně (skupina Brno)


Skupiny_cidla
id_skupiny_cidla---nazev_skupiny_cidla---adresa
1---Praha---Praha, nějaká adresa
2---Brno---Nějaká adresa v brně


Sdileni
id_sdileni---id_uzivatele_sdileni---id_senzoru_sdileni
1---1---1
2---1---2
3---1---3
4---2---1
5---2---4
6---3---1
7---4---1


Uzivatele
id_uzivatele---id_skupiny_uzivatele---jmeno
1---1---Adam Novák
2---1---Petr Lopata
3---2---Josef Zeman
4---2---Roman Franěk


Skupiny_uzivatele
id_skupiny_uzivatele---nazev_skupiny_uzivatele
1---Uživatelé z Prahy
2---Uživatelé z Brna



Jde mi o to že administrátor uživatelů z Brna má form, kde jsou check buttony. Tam je výpis všech čidel, které jsou v dané skupině uživatelů Brno. On si zakliká čidla, které chce sdílet vybere uživatele a poté odešle. V tabulce sdílení se vytvoří zápis. Při dalším zobrazení formu se mu zobrazí všechna čidla a ta, která jsou v tabulce sdílení se zaškrtnou. Zaškrtávání při dalším výpisu a přidávání je funkční akorát když je čidlo sdílené mezi více uživateli tak se u každého uživatele čidlo duplikuje tolikrát, kolikrát je sdíleno. Doufám že chápete mé hluboké myšlenky :D


Screen formuláře.
ctrlv.cz/dAXM


Třeba "Teploměr - DHT11" se sdílí mezi tři uživatele takže tam je 3x. Díky moc.
Kajman
Profil
Tipuji, že podmínka na toho editovaného uživatele má být v rámci left joinu

SELECT * FROM senzory 
 JOIN cidla ON cidla.id_cidla = senzory.id_cidla_senzory 
 JOIN merene_veliciny ON senzory.id_merene_veliciny_senzory = merene_veliciny.id_merene_veliciny 
 JOIN skupiny_cidla ON skupiny_cidla.id_skupiny_cidla = cidla.id_skupiny_cidla_cidla 
 LEFT JOIN sdileni ON sdileni.id_senzoru_sdileni = senzory.id_senzory
                  AND sdileni.id_uzivatele_sdileni = 42
 WHERE skupiny_cidla.id_skupiny_uzivatele_skupiny_cidla = '$id_skupiny_uzivatele'
petrkolos
Profil
Kajman:

Tak paráda. Díky moc už to funguje jak má. Ještě jednou díky :)

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: