vorige volgende rij selecteren in tabel
Hallo,
Ik probeer de volgende rij uit tabel te halen met:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
<?php
$id = $_GET['id'];
$id = ($id+1);
<a href="nieuws.php?id='.$id.'">volgende</a>
$query_nieuws = ("SELECT *
FROM `nieuws` WHERE id = '$id' ORDER BY id DESC LIMIT 1
");
?>
$id = $_GET['id'];
$id = ($id+1);
<a href="nieuws.php?id='.$id.'">volgende</a>
$query_nieuws = ("SELECT *
FROM `nieuws` WHERE id = '$id' ORDER BY id DESC LIMIT 1
");
?>
Maar nu komt het ook voor dat een id er niet meer is bijv. id 1 , 2 , 4 (id 3 bestaat niet meer),
en wat als het de laatste of eerste id betreft.
Er moet ook nog een vorige komen
Gewijzigd op 05/01/2017 22:08:01 door - Ariën -
Code (php)
1
2
3
4
2
3
4
SELECT * FROM nieuws
WHERE ( id = IFNULL((SELECT MIN(id) FROM nieuws WHERE id > $id),0)
OR id = IFNULL((SELECT MAX(id) FROM nieuws WHERE id < $id),0)
)
WHERE ( id = IFNULL((SELECT MIN(id) FROM nieuws WHERE id > $id),0)
OR id = IFNULL((SELECT MAX(id) FROM nieuws WHERE id < $id),0)
)
Dit geeft de vorige en/of volgende records aan als die bestaan.
Twee vliegen in één klap gelijk.
Gewijzigd op 05/01/2017 22:13:11 door - Ariën -
Ik krijg fout
Fatal error: Uncaught Error: Call to a member function fetch_assoc() on boolean in../nieuws-test2.php:40 Stack trace: #0 {main} thrown in ../nieuws-test2.php on line 40
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
$id = $_GET['id'];
$query_nieuws = ("SELECT
* FROM `$tabelnaam` WHERE ( id = IFNULL((SELECT MIN(id) FROM `$tabelnaam` WHERE id > $id),0)
OR id = IFNULL((SELECT MAX(id) FROM `$tabelnaam` WHERE id < $id),0)
");
$result = $mysqli->query($query_nieuws);
while ($row = $result->fetch_assoc() ) { // regel 40
$query_nieuws = ("SELECT
* FROM `$tabelnaam` WHERE ( id = IFNULL((SELECT MIN(id) FROM `$tabelnaam` WHERE id > $id),0)
OR id = IFNULL((SELECT MAX(id) FROM `$tabelnaam` WHERE id < $id),0)
");
$result = $mysqli->query($query_nieuws);
while ($row = $result->fetch_assoc() ) { // regel 40
Wat zegt de foutafhandeling? Of voer het eens los uit in phpMyAdmin?
SQL Fout (1064): You have an error in your SQL syntax;
Pierre Web op 06/01/2017 10:16:07:
SQL Fout (1064): You have an error in your SQL syntax;
... near ...... en hier staat de oplossing.
Graag de complete foutmelding.
Code (php)
1
2
3
4
5
2
3
4
5
SELECT
* FROM `nieuws` WHERE ( id = IFNULL((SELECT MIN(id) FROM `nieuws` WHERE id > $id),0)
OR id = IFNULL((SELECT MAX(id) FROM `nieuws` WHERE id < $id),0) //line 3
* FROM `nieuws` WHERE ( id = IFNULL((SELECT MIN(id) FROM `nieuws` WHERE id > $id),0)
OR id = IFNULL((SELECT MAX(id) FROM `nieuws` WHERE id < $id),0) //line 3
Opmerking: code zoals in mijn 1e post gaf geen fout
Gewijzigd op 06/01/2017 11:04:38 door Pierre Web
Ik heb hem hiermee werkende:
Code (php)
1
2
3
4
2
3
4
SELECT * FROM news
WHERE ( id = IFNULL((SELECT MIN(id) FROM news WHERE id > 1337),0)
OR id = IFNULL((SELECT MAX(id) FROM news WHERE id < 1337),0)
)
WHERE ( id = IFNULL((SELECT MIN(id) FROM news WHERE id > 1337),0)
OR id = IFNULL((SELECT MAX(id) FROM news WHERE id < 1337),0)
)
Ik krijg dan bestaande records 1336 en 1338 te zien.
Gewijzigd op 06/01/2017 11:09:34 door - Ariën -
Code (php)
1
2
3
2
3
$query_nieuws_next = ("SELECT
* FROM `nieuws` WHERE ( id = IFNULL((SELECT MIN(id) FROM `nieuws` WHERE id > 14),0)
OR id = IFNULL((SELECT MAX(id) FROM `nieuws` WHERE id < 14),0)
* FROM `nieuws` WHERE ( id = IFNULL((SELECT MIN(id) FROM `nieuws` WHERE id > 14),0)
OR id = IFNULL((SELECT MAX(id) FROM `nieuws` WHERE id < 14),0)
id 14 is aanwezig maar fout blijft
Gewijzigd op 06/01/2017 11:21:36 door Pierre Web
Gewijzigd op 06/01/2017 11:24:12 door - Ariën -
Code (php)
1
2
3
4
5
2
3
4
5
SELECT
* FROM `nieuws` WHERE ( id = IFNULL((SELECT MIN(id) FROM `nieuws` WHERE id > $id),0)
OR id = IFNULL((SELECT MAX(id) FROM `nieuws` WHERE id < $id),0)
fout blijft
Toevoeging op 06/01/2017 11:41:56:
alle code:
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
29
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
29
<?php
$database_host = 'localhost';
$database_username = 'xxx';
$database_password = 'xxx';
$database_name = 'xxx';
//open mysql connection
$mysqli = new mysqli($database_host, $database_username, $database_password, $database_name);
//output error and exit if there's an error
if ($mysqli->connect_error) {
die('Error : ('. $mysqli->connect_errno .') '. $mysqli->connect_error);
}
?>
<?php
$id= mysqli_real_escape_string($mysqli, $_GET['id']);
$query_nieuws = ("SELECT
* FROM `nieuws` WHERE ( id = IFNULL((SELECT MIN(id) FROM `nieuws` WHERE id > $id),0)
OR id = IFNULL((SELECT MAX(id) FROM `nieuws` WHERE id < $id),0) ");
$result = $mysqli->query($query_nieuws);
while ($row = $result->fetch_assoc() ) {
$id = $row['id'];
}
?>
Gewijzigd op 06/01/2017 11:37:12 door Pierre Web
3 geopende haakjes
3 gesloten haakjes
Op lijn 4 en nog steeds binnen je WHERE tel ik:
3 geopende haakjes
3 gesloten haakjes
Maar de WHERE wordt nergens afgesloten!!
Kijk mijn code nog eens, en vooral naar lijn 4!
Nu moet je het wel zien, denk ik :-P
Gewijzigd op 06/01/2017 11:43:58 door - Ariën -
Die edit van toen was alleen maar het toevoegen van de code-tags eromheen ;-)
En die query is linea-directa gekopieerd uit mijn SQL-editor.
Gewijzigd op 06/01/2017 11:53:44 door - Ariën -
Hoe ga ik na vorige id= met
$id= $id-1 ?
echo '<a href="nieuws-test2.php?id='.$id.'">Vorige</a>';
Gewijzigd op 06/01/2017 12:04:34 door - Ariën -
Heb je de query al uitgetest, want dan zie je dat je dus 1 tot 2 records zal krijgen.
Code (php)
1
2
3
4
5
6
2
3
4
5
6
$result = $mysqli->query($query_nieuws);
while ($row = $result->fetch_assoc() ) {
$id = $row['id'];
$title = $row['title'];
// echo '<a href="nieuws-test2.php?id='.$id.'">Volgende</a>';
}
while ($row = $result->fetch_assoc() ) {
$id = $row['id'];
$title = $row['title'];
// echo '<a href="nieuws-test2.php?id='.$id.'">Volgende</a>';
}
geef in broncode:
Code (php)
1
2
3
2
3
<a href="nieuws-test2.php?id=13">Volgende</a>
<a href="nieuws-test2.php?id=15">Volgende</a>
<a href="nieuws-test2.php?id=15">Volgende</a>
Gewijzigd op 06/01/2017 12:18:43 door Pierre Web
Dus kijk in de loop of het gegeven id hoger of lager is die uit je $_GET
Die is toch gelijk ?
Voer maar in phpMyAdmin uit, en je ziet het.