query struggles
Hallo.
Ik heb een database met producten incl. hoevaak een bepaald product verkocht is.
Nu wil ik per product de rang berekenen en displayen.
Nu kan ik dat makkelijk doen door te sorteren en ze dan op een rijtje te zetten.
Alleen, ik wil per pagina 1 product displayen en daar moet dan vermeld staan wat de rang van dat product is.
Hoe kom ik aan de rang?
table producten
id
name
times_sold
status
stock
Moet dus berekend worden aan de hand van times_sold.
Ik heb een database met producten incl. hoevaak een bepaald product verkocht is.
Nu wil ik per product de rang berekenen en displayen.
Nu kan ik dat makkelijk doen door te sorteren en ze dan op een rijtje te zetten.
Alleen, ik wil per pagina 1 product displayen en daar moet dan vermeld staan wat de rang van dat product is.
Hoe kom ik aan de rang?
table producten
id
name
times_sold
status
stock
Moet dus berekend worden aan de hand van times_sold.
Gesponsorde koppelingen:
Je kan zoiets doen met een eigen tellertje, maar dit lijkt me idioot inefficient en enorm complex.
Ik zou als je MySQL gebruikt dan toch maar voor een tabel gaan die je een paar keer per dag (afhankelijk van hoe vaak de rang veranderd) opnieuw genereert.
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
SELECT
ranked_bedrijven.*
FROM
(
SELECT
@rang := @rang + 1 as rang,
sorted_bedrijven.*
FROM
(SELECT @rang := 0) as rang_reset,
(
SELECT
b.id as id,
b.naam,
COUNT(u.id) as uur
FROM
Bedrijven as b
LEFT JOIN Uren as u ON
u.bedrijf_id = b.id
GROUP BY
b.id
ORDER BY
uur DESC
) as sorted_bedrijven
ORDER BY
uur DESC
) as ranked_bedrijven
ORDER BY
ranked_bedrijven.naam
ranked_bedrijven.*
FROM
(
SELECT
@rang := @rang + 1 as rang,
sorted_bedrijven.*
FROM
(SELECT @rang := 0) as rang_reset,
(
SELECT
b.id as id,
b.naam,
COUNT(u.id) as uur
FROM
Bedrijven as b
LEFT JOIN Uren as u ON
u.bedrijf_id = b.id
GROUP BY
b.id
ORDER BY
uur DESC
) as sorted_bedrijven
ORDER BY
uur DESC
) as ranked_bedrijven
ORDER BY
ranked_bedrijven.naam
Ik zou als je MySQL gebruikt dan toch maar voor een tabel gaan die je een paar keer per dag (afhankelijk van hoe vaak de rang veranderd) opnieuw genereert.
Gewijzigd op 04/04/2011 14:52:37 door Jelmer rrrr
Kheb het nu zo gedaan:
Nu krijg je echter dezelfde rang wanneer een product hetzelfde aantal keer verkocht is....
Code (php)
1
2
3
4
5
2
3
4
5
<?php
$rang_define = mysql_fetch_assoc(mysql_query('SELECT COUNT(*) num FROM Users WHERE Pop > '.$pop));
$rang = $rang_define['num'] + 1;
?>
$rang_define = mysql_fetch_assoc(mysql_query('SELECT COUNT(*) num FROM Users WHERE Pop > '.$pop));
$rang = $rang_define['num'] + 1;
?>
Nu krijg je echter dezelfde rang wanneer een product hetzelfde aantal keer verkocht is....
Als je echte rangen wilt (en niet zoals je tweede oplossing) dan zul je toch echt een rangen tabel moeten maken, zoals Jelmer al suggereert.
Maar als ik die om de 2 minuten ga updaten.... wordt dat niet heel veel traffic met 10000 producten?
Moet je die iedere twee minuten updaten?
En hoeveel meer/minder belasting is de tabel herberekenen en wegschrijven ten opzichte van die hele ranking tabel constant in het geheugen (of in PHP, wat jij probeert?) opnieuw te berekenen?
En hoeveel meer/minder belasting is de tabel herberekenen en wegschrijven ten opzichte van die hele ranking tabel constant in het geheugen (of in PHP, wat jij probeert?) opnieuw te berekenen?
Dunno hoeveel meer/minder belasting het is. Moet iig elke 2 min ge-updated worden ja :P



