Autor | Zpráva | ||
---|---|---|---|
petrkolos Profil |
#1 · Zasláno: 4. 6. 2018, 11:03:18
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 |
#2 · Zasláno: 4. 6. 2018, 11:44:35
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 :) |
||
Časová prodleva: 6 let
|
0