Hallo iedereen,

Ik heb zojuist een pagina-navigatie op mijn website gezet. (Vorig artikel - Volgend Artikel).
Alleen weet ik niet goed hoe ik moet weergeven op welke rij het gekozen artikel staat..

Vb. Artikel 2 van de 7

Dus m.a.w: het gekozen artikel met bv. ID=13 staat op de 2de rij van de 7 in mijn tabel.

Ik weet wel al hoe ik de plaats van alle rijen kan weergeven:

SELECT @rownum:=@rownum+1 rownum, news.* FROM (SELECT @rownum:=0) r, news


maar hoe kan ik er nu bijzetten dat hij gewoon ziet op welke plaats ID 13 staat?

Alvast bedankt!
Als ik je goed begrijp wil je dus aan de hand van het id van een item het rijnummer weten, zonder alle gegevens op te halen?

Aangezien de rijnummers elke keer berekend worden in je query kan je dus niet dit doen:

SELECT @rownum:=@rownum+1 rownum, news.* 
FROM (SELECT @rownum:=0) r, news 
WHERE news.id = 13

Doe je dit dan krijg je er altijd 1 uit. Als je maar 1 rij selecteert is dat altijd de eerste rij.

Je zal dus met een subquery moeten gaan werken:

SELECT rownum
FROM (
  SELECT @rownum:=@rownum+1 rownum, news.* 
  FROM (SELECT @rownum:=0) r, news 
) sub
WHERE id = 13

Nu wordt eerst de hele tabel gemaakt, waardoor wel alle rijen de juiste rijnummers krijgen. Daar selecteer je alleen degene van die je wilt hebben en dan heb je dus het juiste rijnummer.
Even alle ID's (gesorteerd op wat-dan-ook: datum, id, aantal-gelezen oid) uit je database halen en in een array zetten.

Met een count() kijk je hoeveel artikelen er zijn.
Met een array_search() zoek je op het ID van je artikel. Je kijkt welke key daarbij hoort... dat artikel is het dan (van totaal count()).

Kort:
<?php
// array komt uit database
$array = array(1 => "Arend", 2 => "Beer", 3 => "Cobra", 4 => "Dolfijn");
$huidig_artikel = "Cobra";


$aantal = count($array); // geeft 4
$x_van_x = array_search($huidig_artikel, $array); // geeft 3
echo 'U bekijkt artikel '.$x_van_x .' van '.$aantal.' totaal';
?>
Waarom zo'n php oplossing kiezen terwijl dit ook eenvoudig te doen is met de standaard LIMIT functie in SQL?
Omdat je dan 3 queries moet draaien ipv 1.

En de kans dat hij toch alles in 1 kolom gooit en gewoon CSS gaat gebruiken is dan makkelijker te maken ;).
Want CSS kan prima met kolommen omgaan. En die dingen tonen op welke plek ook kan ook met CSS.
Je hoeft helemaal geen 3 queries te draaien, en dat soort dingen hoort gewoon niet in PHP opgelost te worden.
Wat jij doet moet je zelf weten, maar stop er eens mee om als ergens goede oplossingen gegeven worden daar idiote alternatieven voor te geven.
Euh, wacht: verkeerde topic. Die 3 queries sloeg op dat topic met 3 kolommen. Net zoals de rest van het bericht.

Nu het goede bericht:
Dit is net zo snel en kan korter geschreven worden tot 1 regel zonder heel raar te doen. En omdat je toch al die array hebt scheelt het wel een (sub)query.
En als je nu 80.000 records in je database hebt staan. Wil je dan nog steeds eerst alles selecteren, uitlezen, in een array stoppen, in geheugen houden en met php erdoorheen lopen om dat id te zoeken?

Ik mag toch echt hopen van niet....
Eddy, wat jij doet is een hoop data (waarvan het grootste gedeelte overbodig is) in een array laden en dan PHP dingen laten filteren, zoeken etc. Daar hebben ze nu juist de database voor uitgevonden.

[edit]
Erwin was me voor.
[/edit]
Euh.... wellicht. Zou ik even moeten meten wat sneller is. Vooral omdat je toch al wil linken naar relevante artikelen (dwz: bij een zoekquery alleen resultaten ophalen.
Doe je toch wel ergens in een overzicht/link-bulk etc.
Nu ben je aan het brabbelen Eddy. Niemand die 80.000 items op een pagina gaat zetten. En als je het niet doet voor de grote aantallen, moet je het ook niet doen voor de kleinere aantallen.

Maar goed, nutteloze discussie natuurlijk weer.

Reageren