Autor Zpráva
Max258
Profil *
Potreboval by som poradit s komplikaciou, ktora mi uz dva dni lame hlavu.
O co ide?
Mam tabulku uzivatelia:

id | title
--------------
1 | Alojz
2 | Tibor


a dalsiu tabulku dovolenka:
id | fieldname | value
-----------------------------------------------
1 | longitude | 12.584
1 | latitude | 45.258
1 | description | poznamka
2 | longitude | 22.587
2 | latitude | 124.258

Potreboval by som vytvorit 1 prikaz SQL bez php, ktory by mi dokazal priradit uzivatelovi podla unikatneho id dovolenku, ktora ma taktiez unikatne id a teda zhodne.
Problem nastava tym, ze som skusal pouzit funkciu JOIN LEFT lenze v tabulke sa hodnoty opakuju a neporiesim to ani aliasmi.
Idealne by bolo keby nazov longitude obsahoval hodnotu pre id atd...
Vedel by mi niekto nieco poradit alebo ma nasmerovat k rieseniu?
Tori
Profil
vazební tabulka (sloupce id_user, id_dovolenka)?
Kajman_
Profil *
Můžete použít ten left join, kde se hodnoty (o uživateli) opakují, nebo dva dotazy a vždy to zpracovat v php. Porovnání obou přístupů je na
http://php.vrana.cz/srovnani-dotazu-do-zavislych-tabulek.php

Pokud tam jsou jen tahle tři pole (což asi nebudou, protože pak by taková struktura postrádala smysl), tak by šlo něco jako
select u.*, d1.value longitude, d2.value latitude, d3.value description
from uzivatelia u
left join dovolenka d1 on u.id=d1.id and d1.fieldname='longitude'
left join dovolenka d2 on u.id=d2.id and d2.fieldname='latitude'
left join dovolenka d3 on u.id=d3.id and d3.fieldname='description'

ale obecně to zapsat nejde, proto jsou lepší ta první řešení.
Max258
Profil *
Nedala by sa vyuzit podla Vas funkcia group_concat?
Max258
Profil *
Kajman:
Poli to obsahuje viac, v neobmedzenom mnozstve podla uzivatela, kolko si ich prida.
Ale premyslam ako to spojazdnit v jednom SQL prikaze, inak mi to prostredie neponuka prisposobit.
Kajman_
Profil *
Max258:
Nedala by sa vyuzit podla Vas funkcia group_concat?

To si musíte rozmyslet Vy, v jakém formátu chcete výstup. Pokud v jednom sloupečku chcete všechny informace za sebou, tak group_concat můžete použít. Osobně bych to ale tahkle nedělal.

select u.*, group_concat(concat(d.fieldname,':',d.value)) info
from uzivatelia u
left join dovolenka d on u.id=d.id

Vaše odpověď

Mohlo by se hodit

Odkud se sem odkazuje


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0