Array sorteren op natuurlijkewijze reverse
ik heb een vraag, ik heb in mijn database 2 tabellen;
1 voor artikelen
1 voor columns
in de tabel is een veld aangemaakt die bijhoudt hoeveel keer het artikel is bekeken.
Het is nu de bedoeling om die 2 tabellen samen te voegen en daarvan de top 5 van de meest bekeken artikelen te laten zien(van columns en artikelen)
om dit te doen heb ik eerst columns en daarna artikelen uitgelezen en daarvan alle waardes in een array gezet met de volgende waarde per keer:"aantal keer bekeken, het id nr, veld naam, tabel naam".
daarna heb ik de array gesorteerd met een gemaakte natsort() functie
rnatsort()
daarna ben ik alles gaan uitdraaien zoals je hieronder verder kunt zien.
mijn vraag/probleem is:
als ik net na de functie rnatsort() een foreach van de array doe, dan zie ik dat de hoogst aantal bekeken boven aan staat.
maar zodra het allemaal door de for lus gaat dan sorteerd hij ineens heel anders en pakt hij eerst de hoogste van artikelen en daarna die van columns wat niet zou moeten.
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
65
66
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
65
66
<?PHP
$most_read = array();
//alles selecteren uit de db artikelen
$q = "SELECT * FROM artikelen ORDER BY artikelen_bekeken DESC";
$r = mysql_query($q);
while($artikelen = mysql_fetch_object($r)){
$most_read[] = $artikelen->artikelen_bekeken." ".$artikelen->artikelen_id." artikelen_id artikelen";
}
unset($q);
unset($r);
//alles selecteren uit de db collumns
$q = "SELECT * FROM collumns ORDER BY column_bekeken DESC";
$r = mysql_query($q);
while($column = mysql_fetch_object($r)){
$most_view[] = $column->column_bekeken." ".$column->column_id." column_id collumns";
}
unset($q);
unset($r);
//sorteren van de array op datum
rnatsort($most_read);
//beginnen met de lus te maken
for($i=0; $i<5; $i++){
//de variabelen aanmaken zodat ze erlke keer op NULL staan
$tmp_array = array();
$item = "";
$q = "";
$r = "";
$qq = "";
$rr = "";
//alles voor de zekerheid unsetten zodat het echt leeg is!
unset($tmp_array);
unset($item);
unset($q);
unset($r);
unset($qq);
unset($rr);
//1 record uit de array $most_read naar 1 array gooien
$tmp_array = explode(" ", $most_read[$i]);
//beginnen met de opdracht voor de database
$q = "SELECT * FROM ".$tmp_array[3]." WHERE ".$tmp_array[2]." = ".$tmp_array[1];
$r = mysql_query($q) or die(mysql_error());
$item = mysql_fetch_object($r);
//if else lus maken voor de columns en de artikelen
if($tmp_array[3] == "collumns"){
echo "<div class=\"last_article_view_teller\">".$teller.".</div>";
echo "<div class=\"last_article_view\">";
echo "<a href=\"?page=column&columnid=".$item->column_id."\">".substr($item->column_titel, 0, 15)."...</div>\n";
echo "<div class=\"spacer\"></a></div>\n";
}
else{
echo "<div class=\"last_article_view_teller\">".$teller.".</div>";
echo "<div class=\"last_article_view\">";
echo "<a href=\"?page=artikelen&artid=".$item->artikelen_id."\">".substr($item->artikelen_titel, 0, 15)."...</div>\n";
echo "<div class=\"spacer\"></a></div>\n";
}
}
?>
$most_read = array();
//alles selecteren uit de db artikelen
$q = "SELECT * FROM artikelen ORDER BY artikelen_bekeken DESC";
$r = mysql_query($q);
while($artikelen = mysql_fetch_object($r)){
$most_read[] = $artikelen->artikelen_bekeken." ".$artikelen->artikelen_id." artikelen_id artikelen";
}
unset($q);
unset($r);
//alles selecteren uit de db collumns
$q = "SELECT * FROM collumns ORDER BY column_bekeken DESC";
$r = mysql_query($q);
while($column = mysql_fetch_object($r)){
$most_view[] = $column->column_bekeken." ".$column->column_id." column_id collumns";
}
unset($q);
unset($r);
//sorteren van de array op datum
rnatsort($most_read);
//beginnen met de lus te maken
for($i=0; $i<5; $i++){
//de variabelen aanmaken zodat ze erlke keer op NULL staan
$tmp_array = array();
$item = "";
$q = "";
$r = "";
$qq = "";
$rr = "";
//alles voor de zekerheid unsetten zodat het echt leeg is!
unset($tmp_array);
unset($item);
unset($q);
unset($r);
unset($qq);
unset($rr);
//1 record uit de array $most_read naar 1 array gooien
$tmp_array = explode(" ", $most_read[$i]);
//beginnen met de opdracht voor de database
$q = "SELECT * FROM ".$tmp_array[3]." WHERE ".$tmp_array[2]." = ".$tmp_array[1];
$r = mysql_query($q) or die(mysql_error());
$item = mysql_fetch_object($r);
//if else lus maken voor de columns en de artikelen
if($tmp_array[3] == "collumns"){
echo "<div class=\"last_article_view_teller\">".$teller.".</div>";
echo "<div class=\"last_article_view\">";
echo "<a href=\"?page=column&columnid=".$item->column_id."\">".substr($item->column_titel, 0, 15)."...</div>\n";
echo "<div class=\"spacer\"></a></div>\n";
}
else{
echo "<div class=\"last_article_view_teller\">".$teller.".</div>";
echo "<div class=\"last_article_view\">";
echo "<a href=\"?page=artikelen&artid=".$item->artikelen_id."\">".substr($item->artikelen_titel, 0, 15)."...</div>\n";
echo "<div class=\"spacer\"></a></div>\n";
}
}
?>
Gewijzigd op 01/01/1970 01:00:00 door Rein de Vries
Dan blijft het ook up to date en is het veel sneller.
Dit wordt dus iets van een INNER JOIN of zoiets, maar ga dit aub wel in SQL doen ipv PHP.
ofwel?
Je selecteerd dus 3 dingen: aantal_reviews; artikel_id; column_id.
Die sorteer je op aantal_reviews (of hoe je het ook noemt) en dan kijk je wel id WEL gevuld is... als dat artikel_id is, dan is het een artikel (en heb je gelijk het ID ervan, is het column_id, dan is het een column ;).
Eventueel kan het ook een OUTER JOIN worden, maar dat is even kijken.
Ga eerst maar eens lekker spelen in je admin (bijvoorbeeld phpMyAdmin).
Ps... volgens mij kan met JOIN ook koppelen op aliassen.
Dus:
SELECT artikel_id AS id, column_id AS id, aantal_views AS views
FROM ...
ORDER BY views
LIMIT 0, 5
Gewijzigd op 01/01/1970 01:00:00 door Eddy E