Double requêtes SQL

Nouveau WRInaute
Bonjour,

Pour faire simple, j'ai une table appelée news dans une bdd avec id, code, commune, description, photo, articles.

Au lieu de faire une table pour chaque colonne ayant un code différent, j'aimerai intégrer une requête dans mon code ci-dessous, du type sélectionner toutes les "id" de ma table news dont le code = 1 tout en respectant mon code de pagination.



J'ai essayé avec WHERE code = '1', mais ça ne fonctionne pas.
Code:
<?php
   
   /*
   Connexion à   la BDD
   */
   require "connect.php";
   mysql_connect($adresse, $nom, $motdepasse);
   mysql_select_db($database);
   
   $sql = "SELECT COUNT(id) as nbArt FROM news";
   $req = mysql_query($sql) or die(mysql_error());
   $data = mysql_fetch_assoc($req);
      
   $nbArt = $data['nbArt'];
   $perPage = 2;
   $nbPage = ceil($nbArt/$perPage);
   $cPage = 1;
   
   if(isset($_GET['p']) && $_GET['p']>0 && $_GET['p']<=$nbPage){
   $cPage = $_GET['p'];
   }   
   {   
   $sql = "SELECT * FROM news  ORDER BY id DESC LIMIT ".(($cPage-1)*$perPage).",$perPage";
   $req = mysql_query($sql) or die(mysql_error());
   while($data = mysql_fetch_assoc($req)){
            
            ?>

Je fais peut-être une erreur de syntaxe, ou et certainement une mauvaise insertion dans le code (je débute en PHP, merci pour votre indulgence).

J'ai donc essayé

Code:
 <?php
   
   /*
   Connexion à   la BDD
   */
   require "connect.php";
   mysql_connect($adresse, $nom, $motdepasse);
   mysql_select_db($database);
   
   $sql = "SELECT COUNT(id) WHERE code = '1' as nbArt FROM news";
   $req = mysql_query($sql) or die(mysql_error());
   $data = mysql_fetch_assoc($req);
      
   $nbArt = $data['nbArt'];
   $perPage = 2;
   $nbPage = ceil($nbArt/$perPage);
   $cPage = 1;
   
   if(isset($_GET['p']) && $_GET['p']>0 && $_GET['p']<=$nbPage){
   $cPage = $_GET['p'];
   }   
   {   
   $sql = "SELECT * FROM news  ORDER BY id DESC LIMIT ".(($cPage-1)*$perPage).",$perPage";
   $req = mysql_query($sql) or die(mysql_error());
   while($data = mysql_fetch_assoc($req)){
            
            ?>
et aussi
Code:
 <?php
   
   /*
   Connexion à   la BDD
   */
   require "connect.php";
   mysql_connect($adresse, $nom, $motdepasse);
   mysql_select_db($database);
   
   $sql = "SELECT COUNT(id) as nbArt FROM news";
   $req = mysql_query($sql) or die(mysql_error());
   $data = mysql_fetch_assoc($req);
      
   $nbArt = $data['nbArt'];
   $perPage = 2;
   $nbPage = ceil($nbArt/$perPage);
   $cPage = 1;
   
   if(isset($_GET['p']) && $_GET['p']>0 && $_GET['p']<=$nbPage){
   $cPage = $_GET['p'];
   }   
   {   
   $sql = "SELECT * FROM news  WHERE code = '1' ORDER BY id DESC LIMIT ".(($cPage-1)*$perPage).",$perPage";
   $req = mysql_query($sql) or die(mysql_error());
   while($data = mysql_fetch_assoc($req)){
            
            ?>
mais sans succès. Merci pour votre aide.
 
WRInaute discret
Code:
{   
$sql = "SELECT (On ne met pas *, mais le nom des colonnes) FROM news  ORDER BY id DESC LIMIT ".(($cPage-1)*$perPage).",$perPage";
$req = mysql_query($sql) or die(mysql_error());
while($data = mysql_fetch_assoc($req)){
Supprime les accolades autour de ta seconde requête. Y en 2 ouverte qui ne servent à rien. ;-)

Pour info, le test if sur le isset ne sert à rien vu que tu test ensuite qu'il contient une valeur.
 
Nouveau WRInaute
Merci K-mi-k-z de prêter attention à mon post.

Petite question : en mettant le nom des colonne (SELECT (On ne met pas *, mais le nom des colonnes), je vais afficher leur effectivement sélectionner celles que je veux voir afficher. Par contre, je voudrai afficher ces mêmes colonnes, mais avec un critère de sélection pour la colonne "code" :c'est à dire que l'affichage ne prendra en compte que les contenus lorsque le code "achards".

J'espère être à peu près clair, car pas simple à expliquer.

Concernant les accolades et le test if sur le isset, je veux bien te croire, j'ai suivi un tuto que j'ai essayé d'adapter sans réelles connaissances en ce domaine.
 
Nouveau WRInaute
Gloups....désolé. Je vais essayé d'être clair.

J'édite un journal local d'informations sur plusieurs communes, donc plusieurs cantons.
J'ai une page index qui affiche tous les articles réunissants toutes les communes. Jusque là tout va bien.

Mes lecteurs doivent pouvoir depuis la barre de menu sélectionner le canton qui les intéresse.

Je créé donc une page canton1.php, canton2.php etc... Là c'est bon pour moi.

Au lieu de créer une table dans la bdd pour chaque canton, je pense qu'il est possible de récupérer dans la table de la bdd affectée à la page index et en y insérant une colonne du type code avec entrée 1 par exemple pour le canton 1, 2 pour le canton 2, etc... uniquement les articles du canton1 a afficher dans la page canton1.php.

L'objectif étant de limiter le nombre d'action de saisie bien sûr dans les tables par la suite.

J'espère ne pas avoir oublié de mot cette fois...
 
WRInaute discret
Alors si j'ai bien compris ;-) tu veux relier tes news à un canton.
Donc tu crée une table canton du style :

ID canton_name
1 canton1
2 canton2

Puis dans ta table news tu ajoute un champ canton que tu rempliras avec l'id du canton correspondant.
Enfin dans ta page canton1.php la requête sera :
SELECT * FROM news WHERE canton = '1'
 
Nouveau WRInaute
Merci Babylon, mais c'est ce que j'ai essayé dans mes codes que tu peux voir dans mes premiers messages
Code:
$sql = "SELECT * FROM news  WHERE code = '1' ORDER BY id DESC LIMIT ".(($cPage-1)*$perPage).",$perPage";
   $req = mysql_query($sql) or die(mysql_error());
   while($data = mysql_fetch_assoc($req)){
            
            ?>
Malheureusement, ce code ne me permet d'afficher la sélection souhaitée dans ma table. J'ai bien un affichage mais de toutes mes entrées comme si ce code ne prenait pas en compte ma requête.

Est-ce que je l'insère mal dans ma page (voir le code initial dans mon premier message de ce sujet), au mauvais endroit, faut-il créer une autre requête : si oui comment ?
 
WRInaute discret
C'est ça le problème lorsqu'on récupère des bouts de code sans aucune notion.

Dans ton cas, ta requête et sont traitement sont fait pour une pagination, pas un affichage spécifique par page.
En gros, tu compte le nb d'article, et tu les affiches tous à raison de x par page.

Toi, tu cherches à afficher tous les articles pour un canton donné. Rien à voir.
 
Nouveau WRInaute
Je ne souhaite pas devenir programmeur, mais juste mettre en place un site, alors effectivement je cherche à travers des tutos, ce qui peux m'être utile et comprendre tant ce faire se peux comment ça fonctionne.

Je sais que mon code permet la pagination (c'était mon souhait initial), et je serai étonné qu'il ne soit pas possible de sélectionner les entrées d'une colonne selon un critère x, en affectant quelque chose dans ce code.
 
Nouveau WRInaute
Cette réalisation était réalisable effectivement.

Voilà ce qu'il fallait faire ci-dessous. Merci à tous ceux qui ont tenté de m'apporter leur aide.
Code:
$canton = 'achards';
   $sql = "SELECT COUNT(id) as nbArt FROM news WHERE canton = '$canton'";
   $req = mysql_query($sql) or die(mysql_error());
   $data = mysql_fetch_assoc($req);
      
   $nbArt = $data['nbArt'];
   $perPage = 2;
   $nbPage = ceil($nbArt/$perPage);
   $cPage = 1;
   
   if(isset($_GET['p']) && $_GET['p']>0 && $_GET['p']<=$nbPage){
   $cPage = $_GET['p'];
   }   
   {   
   $sql = "SELECT * FROM news WHERE canton = '$canton' ORDER BY id DESC LIMIT ".(($cPage-1)*$perPage).",$perPage";
   $req = mysql_query($sql) or die(mysql_error());
   while($data = mysql_fetch_assoc($req)){
 
Nouveau WRInaute
Si j'enlève ces 2 accolades, les articles ne s'affichent plus. Pourquoi, je n'en sais rien du tout. Par contre avec, j'ai désormais exactement ce que je souhaitais.
 
WRInaute accro
en fait il n'y en a qu'une en trop si le code est complet :

if(isset($_GET['p']) && $_GET['p']>0 && $_GET['p']<=$nbPage){
$cPage = $_GET['p'];
}
{

celle en rouge.

et : if(isset($_GET['p']) && $_GET['p']>0 && $_GET['p']<=$nbPage) devrait pouvoir correspondre a ça :
if($_GET['p']>0 && $_GET['p']<=$nbPage)
 
Nouveau WRInaute
Voila tout le code au complet.
Code:
<?php
   
   /*
   Connexion à   la BDD
   */
   require "connect.php";
   mysql_connect($adresse, $nom, $motdepasse);
   mysql_select_db($database);
   
   $canton = 'achards';
   $sql = "SELECT COUNT(id) as nbArt FROM news WHERE canton = '$canton'";
   $req = mysql_query($sql) or die(mysql_error());
   $data = mysql_fetch_assoc($req);
      
   $nbArt = $data['nbArt'];
   $perPage = 2;
   $nbPage = ceil($nbArt/$perPage);
   $cPage = 1;
   
   if(isset($_GET['p']) && $_GET['p']>0 && $_GET['p']<=$nbPage){
   $cPage = $_GET['p'];
   }   
   {   
   $sql = "SELECT * FROM news WHERE canton = '$canton' ORDER BY id DESC LIMIT ".(($cPage-1)*$perPage).",$perPage";
   $req = mysql_query($sql) or die(mysql_error());
   while($data = mysql_fetch_assoc($req)){
            
            ?>
 
Discussions similaires
Haut