Rijnummer van gekozen ID
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:
maar hoe kan ik er nu bijzetten dat hij gewoon ziet op welke plaats ID 13 staat?
Alvast bedankt!
Aangezien de rijnummers elke keer berekend worden in je query kan je dus niet dit doen:
Code (php)
1
2
3
2
3
SELECT @rownum:=@rownum+1 rownum, news.*
FROM (SELECT @rownum:=0) r, news
WHERE news.id = 13
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:
Code (php)
1
2
3
4
5
6
2
3
4
5
6
SELECT rownum
FROM (
SELECT @rownum:=@rownum+1 rownum, news.*
FROM (SELECT @rownum:=0) r, news
) sub
WHERE id = 13
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.
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:
Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
<?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';
?>
// 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?
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.
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.
Gewijzigd op 27/08/2012 11:15:42 door Ger van Steenderen
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.
Ik mag toch echt hopen van niet....
Doe je toch wel ergens in een overzicht/link-bulk etc.
Maar goed, nutteloze discussie natuurlijk weer.
Het is perfect gelukt met de oplossing van Erwin H.
Dan kan je beter met subqueries met @rownum:= gaan werken!
Zelfkennis siert de mens!.