3 Query's samenvoegen
Ik heb een ledensysteem, en probeer daar een chat bij te bouwen.
Met volgende query' wil ik de groepen tonen met:
- Leden die in de chatgroep zitten
- Laaste bericht
- Datum Laatste bericht
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php
# 1. Alle groepen ophalen waar de gebruiker lid van is.
$groups = DB::select('SELECT group_id FROM chat_users WHERE user_id = ?', array(Auth::user()->id));
foreach($groups as $group) {
# 2. Alle gebruikers per groep ophalen
$users = DB::select('SELECT u.user_id, l.username FROM chat_users u LEFT JOIN leden l ON l.id = u.user_id WHERE group_id = ?', array($group->group_id));
$last_message = DB::select('SELECT message_content, message_from, message_date FROM chat_message WHERE group_id = ? ORDER BY message_date DESC LIMIT 1', array($group->group_id));
echo '<br />Groep '.$group->group_id;
echo '<br />Leden: <br />';
foreach($users as $user) {
echo $user->username.'<br />';
}
foreach($last_message as $message) {
echo $message->message_content;
}
}
?>
# 1. Alle groepen ophalen waar de gebruiker lid van is.
$groups = DB::select('SELECT group_id FROM chat_users WHERE user_id = ?', array(Auth::user()->id));
foreach($groups as $group) {
# 2. Alle gebruikers per groep ophalen
$users = DB::select('SELECT u.user_id, l.username FROM chat_users u LEFT JOIN leden l ON l.id = u.user_id WHERE group_id = ?', array($group->group_id));
$last_message = DB::select('SELECT message_content, message_from, message_date FROM chat_message WHERE group_id = ? ORDER BY message_date DESC LIMIT 1', array($group->group_id));
echo '<br />Groep '.$group->group_id;
echo '<br />Leden: <br />';
foreach($users as $user) {
echo $user->username.'<br />';
}
foreach($last_message as $message) {
echo $message->message_content;
}
}
?>
Dit werkt allemaal, maar nu zou ik de 3 queries in één willen doen.
Waarom?
Alles zal dan in 1 array komen, en in de query zal ik dan kunnen sorteren (De groep met het laatste bericht staat bovenaan).
Ik heb het al een paar keer geprobeerd, maar zonder succes.
Telkens blijft mijn resultaat nul.
Mijn vraag is, is dit mogelijk?
Kan iemand me erbij helpen?
Mvg,
Diov
Toevoeging op 05/10/2013 16:05:47:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php
$testquery = DB::select('SELECT u.user_id, l.username, u.group_id, mm.message_content
FROM chat_users u
LEFT JOIN leden l
ON l.id = u.user_id
LEFT JOIN
(
SELECT mm.message_content, mm.message_date, mm.message_from, mm.group_id
FROM chat_message As mm
ORDER BY message_date DESC
LIMIT 1
) mm
ON mm.group_id = u.group_id
WHERE u.group_id
IN (SELECT g.group_id FROM chat_users g WHERE user_id = ?)
', array(Auth::user()->id));
var_dump($testquery);
?>
$testquery = DB::select('SELECT u.user_id, l.username, u.group_id, mm.message_content
FROM chat_users u
LEFT JOIN leden l
ON l.id = u.user_id
LEFT JOIN
(
SELECT mm.message_content, mm.message_date, mm.message_from, mm.group_id
FROM chat_message As mm
ORDER BY message_date DESC
LIMIT 1
) mm
ON mm.group_id = u.group_id
WHERE u.group_id
IN (SELECT g.group_id FROM chat_users g WHERE user_id = ?)
', array(Auth::user()->id));
var_dump($testquery);
?>
Heb momenteel al dit verkregen, maar message_content blijft leeg, als ik de limit weghaal toont hij alle berichten, en dat is dan ook weer niet de bedoeling.
Toevoeging op 05/10/2013 16:07:09:
Nog niet opgelost:
Het sorteren gaat nog niet ...
Hij toont nog steeds het eerste bericht
Iemand een oplossing voor dit?
Gewijzigd op 05/10/2013 16:11:04 door - Diov -
Er zijn nog geen reacties op dit bericht.