[megoldva] MySQL subselect kérdés

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!

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

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

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.

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

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