Het weergeven van activiteiten door elkaar en op datum gesorteerd

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: 1 2 volgende »

Remco van Akker

Remco van Akker

20/07/2012 21:57:12
Quote Anchor link
Ik ben bezig met een update/activiteiten systeem zoals Hyves/facebook.
Maar ik zit met een probleempje. Hij wil wel alle activiteiten weergeven maar dan sorteerd die ze op persoon.

Even kort uitgelegd: Er word een rij van activiteiten/updates weergeven van Jan en daar onder weer een rij van activiteiten/updates van Henk en ga zo maar door. Dit is niet de bedoeling en dit heeft hyves en facebook ook niet. Want hier bij moet de persoon eerst helemaal naar onder scrollen om degene's activiteiten te kunnen bekijken als die helemaal onderaan staat.

Dus wat ik eigenlijk wil is dat de alle activiteiten/updates worden weergeven van alle vrienden door elkaar maar dan ook op datum gesorteerd zoals hyves en facebook.
Maar hoe krijg ik dit voor elkaar?

Dit is mijn code:
Quote:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?php
$i
= 0;

$selectFriendsID = mysql_query('SELECT friendID FROM friends WHERE userID = "'.$_SESSION['naam'].'" ') or trigger_error(mysql_error());
$g = mysql_fetch_assoc($selectFriendsID);

$updateID = mysql_query('SELECT id, naam, message, date FROM updates WHERE naam = "'.$g['friendID'].'" ') or trigger_error(mysql_error());
$p = mysql_fetch_assoc($updateID);
?>

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php $div = '<div id="'.$p['id'].'">';?>

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php
$selectFriends
= mysql_query('SELECT friendID FROM friends WHERE userID = "'.$_SESSION['naam'].'" ') or trigger_error(mysql_error());
while($f = mysql_fetch_assoc($selectFriends)) {
    
        $a = mysql_query('SELECT id, naam, message, date FROM updates WHERE naam = "'.$f['friendID'].'" ORDER BY date DESC ') or trigger_error(mysql_error());
        $b = mysql_query('SELECT imagelocation, voornaam, achternaam FROM leden WHERE naam = "'.$f['friendID'].'" ') or trigger_error(mysql_error());
        $z = mysql_fetch_assoc($b);
        
        while($q = mysql_fetch_assoc($a)){
            $i++;
            echo '<img src="'.$z['imagelocation'].'" style="width: 40px; height: 40px; float: left; margin-right: 5px;" />';
            echo '<h4>'.$z['voornaam'].' '.$z['achternaam'].'</h4>';
            echo '<span style="font-size: 10px;"><p>'.$q['date'].'</p></span>';
            echo '<hr />';
            echo $q['message'].'<br />';
            echo '<span style="font-size: 11px;">Nice - <a href="?mode=reageren&&naam='.$q['naam'].'&&id='.$q['id'].'">Reageren - <a href="?id='.$q['id'].'">Reacties</a> - Delen</span><br />';
        
        }
// einde van de while statement: $q
        
}// einde van de while statement: $f


?>
 
PHP hulp

PHP hulp

25/04/2024 19:25:46
 
Obelix Idefix

Obelix Idefix

21/07/2012 09:16:25
Quote Anchor link
Je hebt nu twee aparte query's. Vermoed dat je beter naar join kunt kijken. Dan heb je 1 query die je kunt sorteren.
 
Jan Koehoorn

Jan Koehoorn

21/07/2012 12:01:56
Quote Anchor link
Dus:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
SELECT u.id, u.naam, u.date, u.message, l.imagelocation, l.voornaam, l.achternaam
FROM updates AS u
LEFT JOIN ON friends AS f WHERE u.naam = f.id
LEFT JOIN ON leden AS l WHERE u.naam = l.id
ORDER BY u.date ASC

(code niet gecheckt)
 
Remco van Akker

Remco van Akker

21/07/2012 12:03:33
Quote Anchor link
Ik heb deze JOIN query en nu echo't die alle berichten 4x uit.
Dit is de code:
Quote:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
<?php
session_start();
include('config.php');

$query = mysql_query('SELECT * FROM friends JOIN updates ON friends.userID = updates.naam ORDER BY date DESC') or trigger_error(mysql_error());
while($q = mysql_fetch_array($query) ) {
    echo $q['naam'].'<br />';
    echo $q['date'].'<br />';
    echo $q['message'].'<br /><br />';
}

?>
 
Jan Koehoorn

Jan Koehoorn

21/07/2012 12:06:32
Quote Anchor link
@Remco: klopt. Je moet LEFT of RIGHT of INNER gebruiken, anders krijg je het cartesisch product van je tabellen.
 
Remco van Akker

Remco van Akker

21/07/2012 12:10:21
Quote Anchor link
@Jan
Nu ik jou code even heb aangepast naar de goede kolommen in de table(ik weet niet of ik het goed gedaan heb want heb nooit eerder met JOIN query's gewerkt) krijg ik een error.
Dit is de code:
Quote:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
session_start();
include(config.php);

$query = mysql_query('SELECT u.id, u.naam, u.date, u.message, f.friendID, f.userID, l.imagelocation, l.voornaam, l.achternaam, l.naam FROM updates AS u
LEFT JOIN ON friends AS f WHERE u.naam = f.friendID
LEFT JOIN ON leden AS l WHERE u.naam = l.naam
ORDER BY u.date DESC'
) or trigger_error(mysql_error());
while($q = mysql_fetch_assoc($query) ) {
    echo $q['naam'].'<br />';
    echo $q['date'].'<br />';
    echo $q['message'].'<br /><br />';
}

?>
Gewijzigd op 21/07/2012 12:11:02 door Remco van Akker
 
Jan Koehoorn

Jan Koehoorn

21/07/2012 12:23:16
Quote Anchor link
Het zou best helpen als je die error er ook bij zou vermelden ;-)
 
Remco van Akker

Remco van Akker

21/07/2012 12:29:30
Quote Anchor link
Notice: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'ON friends AS f WHERE u.naam = f.friendID LEFT JOIN ON leden AS l WHERE u.naam =' at line 2 in /home/webprijsj/domains/mybuddies.nl/public_html/test2.php on line 12
 
Jan Koehoorn

Jan Koehoorn

21/07/2012 12:36:54
Quote Anchor link
Moet het niet
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
LEFT JOIN ON leden AS l WHERE u.naam = l.friendID

zijn?
 
Remco van Akker

Remco van Akker

21/07/2012 12:44:53
Quote Anchor link
Nee dan heb je nog steeds de error.
 
Eddy E

Eddy E

21/07/2012 12:50:42
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
WHERE u.naam = f.friendID


Ziet er ook raar uit.... een Naam (STRING) koppelen aan een FriendID (ID = INTEGER)


En een JOIN werkt niet met een WHERE, maar met ON!
En wel op een andere plek dan het nu staat.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
$query
= mysql_query('SELECT u.id, u.naam, u.date, u.message, f.friendID, f.userID, l.imagelocation, l.voornaam, l.achternaam, l.naam FROM updates AS u
LEFT JOIN friends AS f ON ( u.naam = f.friendID)
LEFT JOIN leden AS l ON ( u.naam = l.naam)
ORDER BY u.date DESC'
) or trigger_error(mysql_error());
?>


Toevoeging op 21/07/2012 12:51:08:

Jan Koehoorn op 21/07/2012 12:36:54:
Moet het niet
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
LEFT JOIN ON leden AS l WHERE u.naam = l.friendID

zijn?


Eerder dit:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
LEFT JOIN leden AS l ON ( u.naam = l.friendID )
 
Jan Koehoorn

Jan Koehoorn

21/07/2012 12:52:48
Quote Anchor link
En zo:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
SELECT u.id, u.naam, u.date, u.message, l.imagelocation, l.voornaam, l.achternaam
FROM updates AS u
LEFT JOIN friends AS f ON u.naam = f.friendID
LEFT JOIN leden AS l ON u.naam = l.friendID
ORDER BY u.date ASC
 
Remco van Akker

Remco van Akker

21/07/2012 13:03:49
Quote Anchor link
Nu heb ik het zo en echo't hij het 3x uit:
Quote:
SELECT u.id, u.naam, u.date, u.message, l.imagelocation, l.voornaam, l.achternaam, l.naam
FROM updates AS u
LEFT JOIN friends AS f ON u.naam = f.friendID
LEFT JOIN leden AS l ON u.naam = l.naam
ORDER BY u.date ASC
 
Jan Koehoorn

Jan Koehoorn

21/07/2012 13:14:14
Quote Anchor link
Het zou kunnen dat je dubbele records in de tabel 'updates' hebt staan. Check dat even.
Edit: en gebruik LETTERLIJK mijn laatste voorbeeld.
Gewijzigd op 21/07/2012 13:14:51 door Jan Koehoorn
 
Remco van Akker

Remco van Akker

21/07/2012 14:20:10
Quote Anchor link
Hij heeft geen dubbele records en als ik jou code letterlijk over ga nemen krijg ik dit:
Quote:
Notice: Unknown column 'l.friendID' in 'on clause' in /home/webprijsj/domains/mybuddies.nl/public_html/test2.php on line 13


EDIT: Het moet geen l.friendID zijn maar l.naam. Maar dan nog als echo't hij de berichten 4 keer uit.
Gewijzigd op 21/07/2012 14:21:36 door Remco van Akker
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

21/07/2012 15:22:39
Quote Anchor link
Probeer dit eens:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
SELECT
    u.id, u.naam, u.date,
    u.message, f.friendID, f.userID,
    l.imagelocation, l.voornaam,
    l.achternaam, l.naam
FROM
    friends AS f
JOIN
    updates AS u ON u.naam = f.friendID
JOIN
    leden AS l ON l.naam = f.friendID
WHERE
    f.userID = 'iemand'
ORDER BY
    u.date DESC
Gewijzigd op 21/07/2012 15:23:00 door Ger van Steenderen
 
Eddy E

Eddy E

21/07/2012 16:02:08
Quote Anchor link
Als je alles 4x krijgt kan je redelijk eenvouding een DISTINCT of GROUP BY gebruiken.
Voorbeeld (op Ger's code):

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
SELECT
    u.id, u.naam, u.date,
    u.message, f.friendID, f.userID,
    l.imagelocation, l.voornaam,
    l.achternaam, l.naam
FROM
    friends AS f
JOIN
    updates AS u ON u.naam = f.friendID
JOIN
    leden AS l ON l.naam = f.friendID
WHERE
    f.userID = 'iemand'
ORDER BY
    u.date DESC
GROUP BY u.message


Ik heb nu u.message genomen, maar beter op een ID uit die tabel.
 
Remco van Akker

Remco van Akker

21/07/2012 16:03:53
Quote Anchor link
@Ger van Steenderen
Die van jou werkt!
Hartstikke bedankt :)
 
Bart V B

Bart V B

21/07/2012 16:04:17
Quote Anchor link
Eddy volgens mij is het gebruik van GROUP BY hier nou net niet voor bedoeld.
http://dev.mysql.com/doc/refman/5.1/en/group-by-functions.html
 
Eddy E

Eddy E

21/07/2012 17:08:05
Quote Anchor link
Neuh, maar werkt wel.
DISTINCT is dan beter.
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

21/07/2012 17:17:53
Quote Anchor link
Denk niet (weet het trouwens zeker) dat het werkt want GROUP BY moet sowieso voor WHERE ... ORDER BY staan.
Distinct gaat ook niet werken want:
Omdat de basis tabel de verkeerde tabel was in jouw eerdere query en dan ook nog eens een LEFT JOIN op twee tabellen gebruikt wordt krijg je die -naar het lijkt- herhaalde resultaten.
Gewijzigd op 21/07/2012 17:22:08 door Ger van Steenderen
 

Pagina: 1 2 volgende »



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.