Double requêtes SQL

cybereco
Nouveau WRInaute
Nouveau WRInaute
 
Messages: 35
Inscription: 19 Aoû 2011

Double requêtes SQL

Message le Mer Sep 14, 2011 3:50

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: Tout sélectionner
<?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: Tout sélectionner
<?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: Tout sélectionner
<?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.

K-mi-k-z
WRInaute discret
WRInaute discret
 
Messages: 206
Inscription: 26 Aoû 2011

Re: Double requêtes SQL

Message le Mer Sep 14, 2011 4:50

Code: Tout sélectionner
{   
$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.

cybereco
Nouveau WRInaute
Nouveau WRInaute
 
Messages: 35
Inscription: 19 Aoû 2011

Re: Double requêtes SQL

Message le Mer Sep 14, 2011 5:43

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.

K-mi-k-z
WRInaute discret
WRInaute discret
 
Messages: 206
Inscription: 26 Aoû 2011

Re: Double requêtes SQL

Message le Mer Sep 14, 2011 6:54

Là, j'ai rien compris... il doit manquer des mots... :-)

cybereco
Nouveau WRInaute
Nouveau WRInaute
 
Messages: 35
Inscription: 19 Aoû 2011

Re: Double requêtes SQL

Message le Mer Sep 14, 2011 7:08

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...

Babylon
WRInaute discret
WRInaute discret
 
Messages: 191
Inscription: 18 Oct 2006

Re: Double requêtes SQL

Message le Mer Sep 14, 2011 9:32

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'

cybereco
Nouveau WRInaute
Nouveau WRInaute
 
Messages: 35
Inscription: 19 Aoû 2011

Re: Double requêtes SQL

Message le Mer Sep 14, 2011 10:08

Merci Babylon, mais c'est ce que j'ai essayé dans mes codes que tu peux voir dans mes premiers messages
Code: Tout sélectionner
$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 ?

K-mi-k-z
WRInaute discret
WRInaute discret
 
Messages: 206
Inscription: 26 Aoû 2011

Re: Double requêtes SQL

Message le Mer Sep 14, 2011 10:29

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.

cybereco
Nouveau WRInaute
Nouveau WRInaute
 
Messages: 35
Inscription: 19 Aoû 2011

Re: Double requêtes SQL

Message le Mer Sep 14, 2011 11:44

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.

cybereco
Nouveau WRInaute
Nouveau WRInaute
 
Messages: 35
Inscription: 19 Aoû 2011

Re: Double requêtes SQL

Message le Mer Sep 14, 2011 13:07

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: Tout sélectionner
$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)){
Dernière édition par cybereco le Mer Sep 14, 2011 13:39, édité 1 fois.

K-mi-k-z
WRInaute discret
WRInaute discret
 
Messages: 206
Inscription: 26 Aoû 2011

Re: Double requêtes SQL

Message le Mer Sep 14, 2011 13:29

Y a toujours ces 2 accolades ouverte en début et fin de requête qui sont étranges...

cybereco
Nouveau WRInaute
Nouveau WRInaute
 
Messages: 35
Inscription: 19 Aoû 2011

Re: Double requêtes SQL

Message le Mer Sep 14, 2011 13:42

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.

K-mi-k-z
WRInaute discret
WRInaute discret
 
Messages: 206
Inscription: 26 Aoû 2011

Re: Double requêtes SQL

Message le Mer Sep 14, 2011 20:00

Donc, le bout de code que tu nous a filé est incomplet et que les accolades servent à autre chose.


zeb
WRInaute accro
WRInaute accro
 
Messages: 4553
Inscription: 5 Déc 2004

Re: Double requêtes SQL

Message le Mer Sep 14, 2011 20:18

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)

K-mi-k-z
WRInaute discret
WRInaute discret
 
Messages: 206
Inscription: 26 Aoû 2011

Re: Double requêtes SQL

Message le Mer Sep 14, 2011 20:24

... et celle tout à la fin ;-)

Double requêtes SQL

Si vous avez aimé cette discussion, partagez-la sur vos réseaux sociaux préférés :

Lectures recommandées sur ce thème :



Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités