Sziasztok!
Van 3 tábla, az egyikben hibabejelentések (t_pro),
a másikban az egyes bejelentésekhez kapcsolódó n számú megjegyzések (t_pro_his),
a harmadikban felhasználók (t_usr)
t_pro
-----
pro_id
pro_date
usr_id
pro_text
t_pro_his
---------
his_id
his_date
pro_id
his_text
usr_id
t_usr
-----
usr_id
usr_name
szeretnék egy selectet írni és lekérdezni a t_pro tábla teljes tartalmát pro_date sorrendben, úgy, hogy a bejelentő felhasználó neve is benne legyen, valamint az utolsó megjegyzést (his_date alapján) tevő felhasználó neve is megjelenjen.
tudna valaki erre egy megoldást?
jelenleg azzal bénázom, hogy próbálok valami subselectet összedobni, de nem jön össze. Plíz help!
- 1427 megtekintés
Hozzászólások
Nem teszteltem, de valami ilyesmi lesz szerintem:
SELECT t_pro.*, bejelento.usr_name, hozzaszolo.usr_name FROM t_pro LEFT JOIN t_usr AS bejelento ON t_pro.usr_id = bejelento.usr_id LEFT JOIN t_usr AS hozzaszolo ON hozzaszolo.usr_id = (SELECT usr_id FROM t_pro_his WHERE t_pro_his.pro_id = t_pro.pro_id ORDER BY his_date DESC LIMIT 1) ORDER BY pro_date
- A hozzászóláshoz be kell jelentkezni
Köszi!
Itt az a bibi, hogy az order by-nál a his_date valamiért nem tetszik neki. Unknown column 't_pro_his.his_date' in 'order clause'
SELECT
t_pro.*,
bejelento.usr_name,
hozzaszolo.usr_name
FROM t_pro
LEFT JOIN t_usr AS bejelento
ON t_pro.usr_id = bejelento.usr_id
LEFT JOIN t_usr AS hozzaszolo
ON hozzaszolo.usr_id = (SELECT usr_id
FROM t_pro_his
WHERE t_pro_his.pro_id = t_pro.pro_id
ORDER BY t_pro_his.his_date DESC LIMIT 1)
ORDER BY pro_date
- A hozzászóláshoz be kell jelentkezni
Biztos, hogy van his_date oszlopod a t_pro_his táblában?
- A hozzászóláshoz be kell jelentkezni
sajnos van :(
- A hozzászóláshoz be kell jelentkezni
eddig eljutottam, de hogyan tovább?
select
p.*,
(select max(h.pro_his_date)
from t_pro_his as h
where p.pro_id=h.pro_id
limit 1
) as h_date
from t_pro as p
- A hozzászóláshoz be kell jelentkezni
a JOIN a te baratod
- A hozzászóláshoz be kell jelentkezni
Valami hasonlót betennék egy nézetbe(ha van már ilyen a mysql-ben):
SELECT pro_id, usr_name AS his_date_usr_name, max(his_date) AS max_his_date FROM t_pro_his, t_usr WHERE t_pro_his.usr_id=t_usr.usr_id;
Utána ezt 4. táblaként kezelve, már könnyű megcsinálni a kívánt Selectet.
- A hozzászóláshoz be kell jelentkezni
Tök jó lenne, csak az a feladat, hogy ezekből legyen olvasva, más nem használható. :(
- A hozzászóláshoz be kell jelentkezni
SELECT * , (
SELECT usr_name
FROM t_pro_his
LEFT JOIN t_usr
USING ( usr_id )
WHERE t_pro_his.pro_id = t_pro.pro_id
ORDER BY his_date DESC
LIMIT 1
) AS last_commenter
FROM t_pro
LEFT JOIN t_usr
USING ( usr_id )
ORDER BY pro_date
Valószínűleg nem a leggyorsabb, de megy...
- A hozzászóláshoz be kell jelentkezni
Köszi srácok! A kettő kombinációjából kijön! Sokat segítettek!
select
p.*,
(
select max(h.pro_his_date)
from t_pro_his as h
where p.pro_id=h.pro_id
limit 1
) as pro_his_date,
(
select
usr_name
from t_pro_his as h
left join t_usr
using ( usr_id )
where
h.pro_id = p.pro_id
order by
h.pro_his_date desc
limit 1
) as his_usr_name
from
t_pro as p
left join
t_usr
using ( usr_id )
order by
pro_date
- A hozzászóláshoz be kell jelentkezni