Versio

query struggles

Overzicht Reageren

Chi Lion

Chi Lion

04/04/2011 14:33:41
Quote Anchor link
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.
 
PHP hulp

PHP hulp

25/05/2012 13:51:02
Gesponsorde koppelingen:
 
Jelmer rrrr

Jelmer rrrr

04/04/2011 14:51:22
Quote Anchor link
Je kan zoiets doen met een eigen tellertje, maar dit lijkt me idioot inefficient en enorm complex.

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
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


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
 
Chi Lion

Chi Lion

04/04/2011 15:34:46
Quote Anchor link
Kheb het nu zo gedaan:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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;

?>


Nu krijg je echter dezelfde rang wanneer een product hetzelfde aantal keer verkocht is....
 
Gerben Jacobs

Gerben Jacobs

04/04/2011 16:10:18
Quote Anchor link
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.
 
Chi Lion

Chi Lion

04/04/2011 16:19:48
Quote Anchor link
Maar als ik die om de 2 minuten ga updaten.... wordt dat niet heel veel traffic met 10000 producten?
 
Jelmer rrrr

Jelmer rrrr

04/04/2011 16:26:26
Quote Anchor link
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?
 
Chi Lion

Chi Lion

04/04/2011 16:31:34
Quote Anchor link
Dunno hoeveel meer/minder belasting het is. Moet iig elke 2 min ge-updated worden ja :P
 



Overzicht Reageren

Get Adobe Flash player