Archief - Laatste 20 elementen 'hot' ?

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

lny

Legacy Member
Hi,


Ik ben erin geslaagd om een database te maken waar ik al mijn films, games, ... kan aan toevoegen. Bij de weergave zou ik graag de laatste 10 of 20 elementen kunnen markeren als 'hot'. Enig idee op welke wijze ik dit kan doen?
Iedere rij heeft een id (auto_i..).

Mvg,

lny

RpR

Legacy Member
gewoon een datum bijhouden in de record wanneer het is aangemaakt en dan eens selectie doen met top20

lny

Legacy Member
Het gaat reeds om een bestaande lijst van meer dan 300 items ...

Kan ik niet gewoon selecteren op de laatste 20 id's ? En hoe haal ik deze eruit??

KoenDK

Legacy Member
ge kunt ze orderen by ID, en dan de 20 eerste selecteren, neen?

exxhal

Legacy Member
KoenDK zei:
ge kunt ze orderen by ID, en dan de 20 eerste selecteren, neen?



Volgens mij moet je eerst gaan kijken hoeveel id's je hebt.
HTML:
$res1 = mysql_query("SELECT COUNT(id) FROM films") or die("res1: ".mysql_error()); // vraag het AANTAL items op
$items_totaal = mysql_result($res1, 0); // het totaal aantal items
mysql_free_result($res1); // geef het resultaat vrij

$items_per_pagina = 20; // vrij te kiezen
$aantal_paginas =  1; // het aantal items per pagina
Vervolgens de gegevens ophalen uit de db.
HTML:
// items van de huidige pagina ophalen
$offset = $huidige_pagina * $items_per_pagina;
$res2 = mysql_query("SELECT * FROM film ORDER BY id DESC LIMIT ".$offset.","
.$items_per_pagina)  or die("res2:". mysql_error());
while($aBerichten = mysql_fetch_array($res2))
{
De DESC LIMIT zou moeten zorgen voor de laatste id's welke zijn toegevoegd.
Het probleem is vooral wanneer je gegevens gaat aanpassen dat het id hetzelfde blijft en deze dan niet in je top20 zal komen te staan.

Syphon

Legacy Member
Kan hij niet zoiets doen


$hot_items = 20;
$hot_items = laatste id - $hot_items;

en dan in de while lus
if(id >= $hot_items){
echo 'hot!';
}

zodra hij een row verwijdert werkt het natuurlijk niet meer

Cycloon

Legacy Member
Code:
SELECT * FROM films ORDER BY id DESC LIMIT 0,20

There you go.

Als je die hot binnen dezelfde lijst wil weergeven zal je wel wat PHP moeten gebruiken, gewoon je aantal results bijhouden en vanaf de laatste 20 een extra "hot" toevoegen in de HTML.

Edit: Toch maar een volledige query bedacht die alles voor jou zal doen normaal:

Code:
SELECT CASE WHEN id IN (SELECT id FROM films ORDER BY id DESC LIMIT 0,20) THEN 'HOT' END hot, id, naam, titel, FROM films

Heb zelf maar wat velden bedacht, maar je krijgt nu dus een extra veld die 'hot' heet en de string HOT zal bevatten als hij bij de laatste 20 is.

RpR

Legacy Member
Probleem met dit is dat je ervan uitgaat dat een id altijd maar oploopt. Dit is in het begin zo maar na een tijdje worden verwijderde id's terug opgevuld...

Ook bij wijzigingen kan je HOT niet gebruiken. Beste wat je kan doen is een datumveld toevoegen en op huidige datum zetten en dan 20 dingen selecteren en een beetje wijzigen zodat er 20 hot items zijn...

Lord Kveldulv

Legacy Member
RpR zei:
Probleem met dit is dat je ervan uitgaat dat een id altijd maar oploopt. Dit is in het begin zo maar na een tijdje worden verwijderde id's terug opgevuld...

Enkel en alleen als je het zelf bewust doet en het is overigens niet aan te raden.

Cycloon

Legacy Member
RpR zei:
Probleem met dit is dat je ervan uitgaat dat een id altijd maar oploopt. Dit is in het begin zo maar na een tijdje worden verwijderde id's terug opgevuld...

Ook bij wijzigingen kan je HOT niet gebruiken. Beste wat je kan doen is een datumveld toevoegen en op huidige datum zetten en dan 20 dingen selecteren en een beetje wijzigen zodat er 20 hot items zijn...

Limit houdt geen rekening met oplopende keys. Er mogen nog 1000den lege keys tussen zitten, nog steeds zul je 20 rijen krijgen (als er genoeg zijn tenminste).

exxhal

Legacy Member
Stel dat je nu enkel het voorlaatste id wil opvragen of vanaf het voorlaatste id wil beginnen te tellen ?
Hoe voer je dan de query uit ?

killgore

Legacy Member
exxhal zei:
Stel dat je nu enkel het voorlaatste id wil opvragen of vanaf het voorlaatste id wil beginnen te tellen ?
Hoe voer je dan de query uit ?

LIMIT 20 OFFSET 1

werkt in zowel mysql als postgresql

exxhal

Legacy Member
killgore zei:
LIMIT 20 OFFSET 1

werkt in zowel mysql als postgresql

Bedankt werkt perfect op de website.
Eerst deed ik het met een berekening -1 in de query, maar als er geen id onder zat had ik pech en dus ook geen gegevens.

Bedankt.
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan