sorteer vraag
Ik zit al een tijdje in de knoop met een sorteer kwestie...
het gaat om het volgende:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?
tabel 1(member_1)
id | friend_id | accept
1 2 1
2 5 1
3 9 0
4 etc.
tabel 2(member_2)
id | friend_id | accept
1 1 1
2 4 0
3 3 1
4 etc.
tabel 3(members)
id | naam | email | visit | etc.
1 piet p@k.l 030607
2 kees m@g.h 020607
3 jan r@d.g 010407
4 klaas g@g.l 300507
?>
tabel 1(member_1)
id | friend_id | accept
1 2 1
2 5 1
3 9 0
4 etc.
tabel 2(member_2)
id | friend_id | accept
1 1 1
2 4 0
3 3 1
4 etc.
tabel 3(members)
id | naam | email | visit | etc.
1 piet p@k.l 030607
2 kees m@g.h 020607
3 jan r@d.g 010407
4 klaas g@g.l 300507
?>
Nou haal ik ten eerste alle records uit de eerste tabel waar accept is "1".
Daarna laat ik em kijken in alle andere member_? tabelen waarvan de accept dus "1" was uit de eerste tabel, om te controleren of die "friend_id" ook accept "1" heeft.
hierna bekijk ik dus of de uitkomst van de eerste en de tweede query, allebij accept "1" hebben.
dit zit dus allemaal in een while loop omdat het dus niet om een resultaat gaat maar afhankelijk van hoeveel "id" er in de "member_?" tabel zitten.
als dan allebij records op accept "1" staat dan haal ik de gegevens erbij uit tabel 3 van degenen.
alles werkt ook aan dit verhaal, alleen weet ik niet hoe ik moet sorteren op ("visit") al deze losse resultaten die ik terug krijg.
ps. het wil niet met ORDER BY
Gewijzigd op 01/01/1970 01:00:00 door JSP
Zodra jij voor elke member een eigen tabel gaat aanmaken waarin je zijn vrienden opslaat ben je verkeerd bezig en zul je terug moeten naar de tekentafel om je datamodel aan te passen.
Wat je hier hoort te gebruiken is een koppeltabel waarmee je members als vrienden aan elkaar kunt koppelen. Dus iets als:
members
------------
id
naam
...
friends
--------
id
member_id
friend
Hierbij maakt het niet uit dat 'friend' eigenlijk ook weer het id van een andere member is.
Als je nu wil weten of member x de uitnodiging van member y geaccepteerd heeft hoef je allen maar te controleren of de juiste records in de friends tabel voorkomen.
Dus de volgende records moet je dan zien:
1 | x | y
2 | y | x
Hierbij stellen 1 en 2 natuurlijk een willekeurig id voor.
Jeetje dat klinkt wel best logish ja. ga het meteen allemaal omgooien...
Volgens mij geeft ASC de hoogste resultaten eerst, en DESC de laagste. Maar het zou goed andersom kunnen zijn.
Je query zou er dan ongeveer zo uit zien:
ja dat klopt maar dat werkte dus zobizo niet doordat het allemaal enkele resultaten worden... ASC = a - z en DESC z - a alfabetisch tenminste...
ASC = ascending = oplopend = laag -> hoog
DESC = descending = aflopend = hoog -> laag
Alles werkt ook weer, alleen het sorteren weer niet.
Ik snap er niks meer van hoe ik dat moet hebben?
Om alle resultaten weer te geven moet ie wel in een loop zitten en dan krijg ik weer te maken met hetzelfde probleem dat ie alles als enkel resultaat ziet...
Gewijzigd op 01/01/1970 01:00:00 door JSP
Wat is de query die je nu gebruikt dan?
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
<?php
// sfr = select friends
$sql_sfr = "SELECT member_id, friend_id
FROM friends
WHERE member_id = $mid";
$result_sfr = mysql_query($sql_sfr);
if (!$result_sfr) {
echo "could not run ($sql_sfr).: " . mysql_error();
exit;
}
if (mysql_num_rows($result_sfr) == 0) {
echo "No rows found sfr.";
exit;
}
while($row_sfr = mysql_fetch_assoc($result_sfr))
{
// chmb = check member
$query_chmb = mysql_query("SELECT * FROM friends
WHERE $row_sfr[member_id] AND friend_id = $row_sfr[friend_id]
")or die(mysql_error());
$result_chmb = mysql_num_rows($query_chmb);
// chfr = check friend
$query_chfr = mysql_query("SELECT * FROM friends
WHERE $row_sfr[friend_id] AND friend_id = $row_sfr[member_id]
")or die(mysql_error());
$result_chfr = mysql_num_rows($query_chfr);
if($result_chmb & $result_chfr)
{
// shfr = show friends
$sql_shfr = "SELECT *
FROM members
WHERE memberid = $row_sfr[friend_id]";
$result_shfr = mysql_query($sql_shfr);
if (!$result_shfr) {
echo "could not run ($sql_shfr).: " . mysql_error();
exit;
}
if (mysql_num_rows($result_shfr) == 0) {
echo "No rows found shfr.";
exit;
}
while($row_shfr = mysql_fetch_assoc($result_shfr)){
$friend_name = $row_shfr["gebruikersnaam"];
}
echo '' . $friend_name . '';
}
}
?>
// sfr = select friends
$sql_sfr = "SELECT member_id, friend_id
FROM friends
WHERE member_id = $mid";
$result_sfr = mysql_query($sql_sfr);
if (!$result_sfr) {
echo "could not run ($sql_sfr).: " . mysql_error();
exit;
}
if (mysql_num_rows($result_sfr) == 0) {
echo "No rows found sfr.";
exit;
}
while($row_sfr = mysql_fetch_assoc($result_sfr))
{
// chmb = check member
$query_chmb = mysql_query("SELECT * FROM friends
WHERE $row_sfr[member_id] AND friend_id = $row_sfr[friend_id]
")or die(mysql_error());
$result_chmb = mysql_num_rows($query_chmb);
// chfr = check friend
$query_chfr = mysql_query("SELECT * FROM friends
WHERE $row_sfr[friend_id] AND friend_id = $row_sfr[member_id]
")or die(mysql_error());
$result_chfr = mysql_num_rows($query_chfr);
if($result_chmb & $result_chfr)
{
// shfr = show friends
$sql_shfr = "SELECT *
FROM members
WHERE memberid = $row_sfr[friend_id]";
$result_shfr = mysql_query($sql_shfr);
if (!$result_shfr) {
echo "could not run ($sql_shfr).: " . mysql_error();
exit;
}
if (mysql_num_rows($result_shfr) == 0) {
echo "No rows found shfr.";
exit;
}
while($row_shfr = mysql_fetch_assoc($result_shfr)){
$friend_name = $row_shfr["gebruikersnaam"];
}
echo '' . $friend_name . '';
}
}
?>
ps. $mid is de algemene variable van de member zeg maar www.website.nl/profiel.php?mid=$mid
Wat was nou hetgene waarop je wilde sorteren?
Blanche schreef op 04.06.2007 16:50:
Je gebruikt nu 3 queries die je waarschijnlijk ook samen kunt nemen in 1 query.
Hoe doe je dat dan in 1 query?
Blanche schreef op 04.06.2007 16:50:
Daarbij zie ik nergens een ORDER BY staan?
Wat was nou hetgene waarop je wilde sorteren?
Wat was nou hetgene waarop je wilde sorteren?
Nee dat heb ik weggelaten, omdat dat niet werkte, maar ik wou het bij de laatste query gebruiken:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<?php
// shfr = show friends
$sql_shfr = "SELECT *
FROM members
WHERE memberid = $row_sfr[friend_id]
ORDER BY visit DESC";
$result_shfr = mysql_query($sql_shfr);
if (!$result_shfr) {
echo "could not run ($sql_shfr).: " . mysql_error();
exit;
}
if (mysql_num_rows($result_shfr) == 0) {
echo "No rows found shfr.";
exit;
}
while($row_shfr = mysql_fetch_assoc($result_shfr)){
$friend_name = $row_shfr["gebruikersnaam"];
}
echo '' . $friend_name . '';
}
}
?>
// shfr = show friends
$sql_shfr = "SELECT *
FROM members
WHERE memberid = $row_sfr[friend_id]
ORDER BY visit DESC";
$result_shfr = mysql_query($sql_shfr);
if (!$result_shfr) {
echo "could not run ($sql_shfr).: " . mysql_error();
exit;
}
if (mysql_num_rows($result_shfr) == 0) {
echo "No rows found shfr.";
exit;
}
while($row_shfr = mysql_fetch_assoc($result_shfr)){
$friend_name = $row_shfr["gebruikersnaam"];
}
echo '' . $friend_name . '';
}
}
?>
en dan zeg maar op visit(ik heb het er nou weer bij staan)
Ik weet niet wat die waarden voor moeten stellen, maar het lijkt erop dat het data zijn. Deze hoor je dan gewoon in een veld van het type DATE op te slaan en niet als een VARCHAR zoals het nu, vermoed ik, opgeslagen is.
Zodra jij het juiste type gebruikt, kun je gewoon op die kolom sorteren...
dit is de rij van visit uit de database weg
Op een kolom van het type DATETIME moet je gewoon kunnen sorteren. Is hij wel op de goede manier gevuld? Dus met het format: yyyy-mm-dd hh:mm:ss?
Als het datatype werkelijk datetime is, zouden deze waarden niet eens geaccepteerd moeten worden door MySQL. Zet zoals Jan dus al zegt deze waarden eens om naar correcte datetime waarden.
en dan zet ie dit erin
2007-04-06 17:18:23
ps. die waarden waren even afgekort mijn fout, sorry
Gewijzigd op 01/01/1970 01:00:00 door JSP
Gebruik gewoon NOW() in je query, dan gaat het automatisch goed.
maar wat er gebeurt met mijn script is dat hij allemaal losse resultaten uit een while loop terug geeft dus heeft hij niks te sorteren...(denk ik tenminste)
Ik heb ook al wat met sort(asort) geprobeert
en dan geeft hij als voorbeeld met memberid:
[0] => 2
[0] => 5
[0] => 3
[0] => 7
en dan vooral lettend op die nullen, normaal zou hij dan toch 0, 1, 2, 3
moeten weergeven daar?
http://nl2.php.net/manual/en/function.sort.php
Gewijzigd op 01/01/1970 01:00:00 door JSP
Ik volg eerlijk gezegd nu niet helemaal meer waar je mee bezig bent.