2009-02-27 6 views
1

Comment puis-je faire pour obtenir la ligne suivante dans un tableau?Récupère la ligne précédente et la ligne suivante de l'ID actuel

`image_id` int(11) NOT NULL auto_increment 
`image_title` varchar(255) NOT NULL 
`image_text` mediumtext NOT NULL 
`image_date` datetime NOT NULL 
`image_filename` varchar(255) NOT NULL 

Si l'image actuelle est de 3 par exemple et le suivant est 7, etc. cela ne fonctionnera pas:

$query = mysql_query("SELECT * FROM images WHERE image_id = ".intval($_GET['id'])); 
echo $_GET['id']+1; 

Comment dois-je faire?

merci

Répondre

2

Vous êtes très proche. Essayez ceci:

$query = mysql_query("SELECT * FROM images 
        WHERE image_id > ".intval($_GET['id'])." ORDER BY image_id LIMIT 1"); 

    <?php echo $_GET['id'] ?> 
+0

Enfants, s'il vous plaît ne le faites pas à la maison. Cela crie [Injection SQL] (https://en.wikipedia.org/wiki/SQL_injection). Utilisez PDO et/ou des requêtes paramétrées. – sleske

11
SELECT * FROM images WHERE image_id < 3 ORDER BY image_id DESC LIMIT 1 -- Previous 
SELECT * FROM images WHERE image_id > 3 ORDER BY image_id LIMIT 1 -- Next 
4

Si vous voulez encercler les dossiers, vous pouvez utiliser ceci:

-- previous or last, if there is no previous 
SELECT * 
FROM images 
WHERE image_id < 12345 OR image_id = MAX(image_id) 
ORDER BY image_id DESC 
LIMIT 1 

-- next or first, if there is no next 
SELECT * 
FROM images 
WHERE image_id > 12345 OR image_id = MIN(image_id) 
ORDER BY image_id ASC 
LIMIT 1 

La même chose avec UNION, peut-être encore plus efficace:

-- previous or last, if there is no previous 
(SELECT * FROM images WHERE image_id < 12345 ORDER BY image_id DESC LIMIT 1) 
UNION (SELECT * FROM images WHERE image_id = (SELECT MAX(image_id) FROM images)) 
LIMIT 1 

-- next or first, if there is no next 
(SELECT * FROM images WHERE image_id > 12345 ORDER BY image_id ASC LIMIT 1) 
UNION (SELECT * FROM images WHERE image_id = (SELECT MIN(image_id) FROM images)) 
LIMIT 1 
+0

Votre réponse est vraiment cool, et que diriez-vous de l'affaire de l'image de la table a un autre champ: «image_type». Je veux sélectionner le suivant/premier et précédent/dernier qui image_type = $ img_type. Notez que next/first ou previous/last correspondent à un type d'image spécifique ($ img_type), pas à tous les types d'image. –

+0

@AJOP Enveloppez la condition 'WHERE' existante entre parenthèses et ajoutez votre condition avec 'AND'. – Gumbo

+0

Je pense que je ne peux pas utiliser la fonction MAX et MIN() dans la clause Where, mais je ne sais pas pourquoi? –

0

S'il vous plaît, pour l'amour de l'Internet, ne construit pas une requête SQL vous-même. Utilisez PDO.

+5

S'il vous plaît, pour l'amour de StackOverflow, n'écrivez pas ce genre de réponses. Utilisez les commentaires. –

Questions connexes