PHP, besoin d'un petit cout de pouce

Statut
N'est pas ouverte pour d'autres réponses.
1er
OP
DeScH

DeScH

AstaLaVista
Merci merci, j'aurai encore appris qqch aujourd'hui lol

J'ai essayé cette requete:

Code:
SELECT * FROM News WHERE id=(SELECT id FROM News WHERE id<$id ORDER BY id DESC LIMIT 1) OR id>=$id ORDER BY id DESC LIMIT 3
Mais elle ne marche pas comme il faut. Elle me sélectionne l'id +1 et -1 d'une news qui n'a rien avoir avec ce que je veux. L'autre requete ne fonctionne pas.

Code:
$q=" SELECT * FROM $tbl_news WHERE id=(SELECT id FROM $tbl_news WHERE id>$id_article ORDER BY id DESC LIMIT 1) OR id<=$id_article ORDER BY id DESC LIMIT 3";
Si je fais cette requete la, j'ai la news précédente en 3e position(+1). une news qui n'a rien a en 1ere et la bonne au milieu.
 

oNi-

:baille: Lecteur
Ceci fonctionne :
Code:
SELECT * 
FROM News
WHERE 
  id=(SELECT id FROM News WHERE id <$id_article ORDER BY id DESC LIMIT 1) OR
  id=(SELECT id FROM News WHERE id =$id_article LIMIT 1) OR
  id=(SELECT id FROM News WHERE id >$id_article ORDER BY id LIMIT 1)
ORDER BY id
LIMIT 3;
Cas général = news pour laquelle on peut trouver une news précédente ainsi que la suivante.
exemple pour la news 15 : ça nous donne bien les 14, 15 et 16 (ou 13, 15 et 16, par exemple, si la 14 n'existe plus dans ta DB).

Qu'obtiens-tu quand ton $id_article est le 1 ?
Comme il n'y a pas de news précédente tu auras : 1 et 2 (donc 2 lignes)
et pour la dernière news : news précédente et news actuelle (donc celle qui correspond à $id_article).

Il faudra donc tester si le champ id de la ligne de ton $result est :
inférieur à $id_article : dans ce cas tu as la news précédente
égal à $id_article : l'article actuel
supérieur à $id_article : news suivante
Donc un truc dont l'ossature devrait se rapprocher de ça :
Code:
$result = mysql_query('');
while($row = mysql_fetch_assoc($result))
{
    if($row['id']<$id_article)
    {
        $news_prec['id'] = $row['id'];
        // etc.
    }
    elseif($row['id']=$id_article)
    {
        $news_cour['id'] = $row['id'];
        // etc.
    }
    else
    {
        $news_suiv['id'] = $row['id'];
        // etc.
    }
}
Mais bon... ça me semble être beaucoup de chipotage et je me demande pourquoi tu n'as pas pris en considération la remarque de guslinux lorsqu'il parlait de faire 3 SELECT séparés... Car de toute manière quand on analyse le premier code de ce message on fait de toute façon 3 SELECT (en fait 4) et ensuite on se fait ch*** avec les tests en sortie :/
Alors qu'avec sa méthode, tu sais ce que tu attends et soit tu l'obtiens soit c'est null.

A toi de voir ;)
 
1er
OP
DeScH

DeScH

AstaLaVista
Merci merci, j'y vois bcp plus clair.
Oui en fait je pense que je vais faire ces 3 requetes séparément. J'ai voulu trouver un système pour faire les 3 requetes en une car je me disais que ca prendrait moins de ressources sur le server mais ca revient au meme finalement.
Je vais donc tester tt ca.

Code:
$q=" SELECT * FROM $tbl_news WHERE id= $id_article LIMIT 1";
$reqd = mysql_query($q);
$nb_art = mysql_num_rows($reqd);

$q=" SELECT * FROM $tbl_news WHERE id < $id_article ORDER BY id DESC LIMIT 1";
$reqd = mysql_query($q);
$news_avant = mysql_fetch_assoc($reqd);
$news_prec_nb = mysql_num_rows($reqd);

$q=" SELECT * FROM $tbl_news WHERE id > $id_article LIMIT 1";
$reqd = mysql_query($q);
$news_apres = mysql_fetch_assoc($reqd);
$news_suiv_nb = mysql_num_rows($reqd);

....

if ($news_prec_nb !=0){
//afficher news précédente
}
if ($news_suiv_nb !=0){
//afficher news suivante
}
 
Statut
N'est pas ouverte pour d'autres réponses.
Haut