Aller au contenu

Sujets conseillés

Posté

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

Posté (modifié)
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
Posté
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.

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
Posté (modifié)

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
Posté (modifié)

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

Veuillez vous connecter pour commenter

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



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