Aller au contenu

Probleme avec mysql_fetch_row


furious Gontran

Sujets conseillés

Salut.

Voici mon code:

$requete="SELECT Id_Livre FROM autlivre WHERE ".$Id_Edit." LIKE Id_Edit";

$result=ExecRequete($requete, $connexion);

while ($tab=mysql_fetch_row($result))

{

$And.=" AND (Id LIKE $tab[0]) ";

}

$req="SELECT * FROM livre WHERE 1$And ORDER BY Nom LIMIT $position,$fin";

echo "<br>".$req;

echo "<p><H3 ALIGN='Center'>Table: ". $Table."<BR><BR>";

$resultat=ExecRequete($req, $connexion);

while ($po=mysql_fetch_row($resultat))

{

echo"<br>po=".$po[1];

echo"<br>Titre= ".$po[1];

}

Mes requetes sont toutes correctement faites, les And, se placent bien etc.

Cependant, le deuxieme while ne s'execute que lorsque la requete ne possede qu'un seul AND...

Mes requetes sont de la forme:

SELECT * FROM livre WHERE 1 AND (Id LIKE 212) AND (Id LIKE 213) ORDER BY Nom LIMIT 0,100

Je ne comprend pas d'ou viens le probleme avec mes AND...

Lien vers le commentaire
Partager sur d’autres sites

SELECT * FROM livre WHERE 1 AND (Id LIKE 212) AND (Id LIKE 213) ORDER BY Nom LIMIT 0,100

Je connais cette facon de faire...

Moi je fais :

SELECT champs1, champs2 FROM livre WHERE Id ='212' OR Id ='213' ORDER BY Nom LIMIT 0,100

Essaye avec le OR, ca marchera mieux je pense :D

Parce que tu peux pas avoir deux fois une valeur ;)

Et évite le fameux "select *", ca bouffe du processeur souvent pour rien :)

Modifié par portekoi
Lien vers le commentaire
Partager sur d’autres sites

SELECT * FROM livre WHERE 1 AND (Id LIKE 212) AND (Id LIKE 213) ORDER BY Nom LIMIT 0,100

Tu voudrais que 'Id' soit égal à 212 ET à 213 en meme temps. Tu n'auras jamais les 2 à la fois. Soit c'est egal à 212, soit à 213.

D'où l'erreur, et la correction apportée par Portekoi.

Lien vers le commentaire
Partager sur d’autres sites

Posté (modifié)

Par contre, probleme:

Ma requete me sors toutes les valeurs sans prendre en compte les id indiqués...

Requete:

SELECT * FROM livre WHERE 1 OR (Id LIKE 826) OR (Id LIKE 827) OR (Id LIKE 828) OR (Id LIKE 829) OR (Id LIKE 908) ORDER BY Nom LIMIT 0,100

Modifié par furious Gontran
Lien vers le commentaire
Partager sur d’autres sites

Bon je recommence....

1 - Tu dois pas mettre de '1' dans ton 'where' car cela retourne tous les enregistrements et en plus ca te sers à rien.

SELECT * FROM livre WHERE Id='826' OR Id='827' OR Id='828' OR Id='829' OR Id='908' ORDER BY Nom LIMIT 0,100

Et les '(' et ')' te servent à rien dans ton cas...

2 - Au lieu de faire des 'like', tu fais id='216' or id='217'

Vala, réessaye et tu verras, ca marchera :)

Modifié par portekoi
Lien vers le commentaire
Partager sur d’autres sites

Re,

Alors pour ma part, j'utilise le 1 lorsque je construit ma clause where.

C'est à dire... hum tiens, pour ton exemple, on a un formulaire avec 3 champs de type text :

Auteur - Titre - Editeur

La personne a saisie les 3 champs ou 2 champs sur les 3 ou 1 champs sur les 3 donc :

if (!$_POST["Auteur"])
{
  $sqlwhere = $sqlwhere . " and auteur='".$_POST["Auteur"])."'"
}

if (!$_POST["Titre"])
{
  $sqlwhere = $sqlwhere . " and Titre='".$_POST["Titre"])."'"
}

if (!$_POST["Editeur"])
{
  $sqlwhere = $sqlwhere . " and Editeur='".$_POST["Editeur"])."'"
}

Et ainsi ma requete sera :

"Select champ1, champ2, champ3 from livre where 1=1" . $sqlwhere

Ce qui sera traduis par : Select champ1, champ2, champ3 from livre where 1=1 and auteur='Portekoi' si la personne n'a saisie que l'auteur :)

Pour les autres utilisations, ca sort du cadre de ce forum ^^

Portekoi

PS :Et en plus je te fais un mini moteur de recherche, elle est pas belle la vie sur le Hub? ^_^

Modifié par portekoi
Lien vers le commentaire
Partager sur d’autres sites

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...