Page 1 sur 1

Sélectionner toutes les entrées sauf une

Posté : 17 juil. 2007, 15:16
par maelinn
C'est sans doute une question très bête mais je ne sais pas comment faire...

Je fais un site répertoriant des fiches de livres. Je voudrais y ajouter des liens vers tous les livres du même auteur mais sans y mettre le livre de la fiche.

Mon code php :
$retour = mysql_query("SELECT * FROM livres WHERE auteur_nom='$auteur_nom' AND auteur_prenom='$auteur_prenom' ORDER BY titre ");
		 while ($donnees = mysql_fetch_array($retour))
			{
				
				?>
				<p class="listelivre"><b>
				<?php echo '<a href="lire.php?lire=' . $donnees['id'] . '">'; ?>
				<?php echo ($donnees['titre']); ?></a><br>
				</p>
			
				<?php
				
			} // Fin de la boucle
			?>
Existe t-il un filtre à ajouter après where qui serait l'équivalent de "sauf" ? Ou bien dois-je utiliser les conditions ? Et dans ce cas, pourriez-vous me donner une piste à suivre ?

Merci :)

Posté : 17 juil. 2007, 15:21
par charabia
Je pense que tu peux mettre un ID sur le lien du livre de la fiche. Ensuite dans ta requête tu peux tout simplement dire "où l'ID est différent de la variable passée dans l'URL"

Posté : 17 juil. 2007, 15:24
par d0m
je suppose que tu as un identifiant pour le livre ou un titre, alors dans la clause WHERE tu mets :

Code : Tout sélectionner

AND titre_livre NOT IN ('" .$titre_livre. "') ;" ou AND id_livre NOT IN (" .$id_livre. ");"

Posté : 17 juil. 2007, 16:28
par maelinn
Merci pour vos réponses !

DOm, j'ai essayé ton code mais il me renvoie : supplied argument is not a valid MySQL result resource. Je pensais que NOT IN servait seulement pour trouver une entrée dans une autre table non ?

Par contre, j'ai fait quelques recherches et j'ai réussi à trouver ce que je voulais :D

Pour ceux que ça intéresse, j'ai utilisé la condition NOT LIKE :
$retour = mysql_query("SELECT * FROM livres WHERE auteur_nom='$auteur_nom' AND auteur_prenom='$auteur_prenom' AND id NOT LIKE '" .$_GET['lire']."' ");
		 while ($donnees = mysql_fetch_array($retour))

Merci pour votre aide :o

Posté : 17 juil. 2007, 16:36
par d0m
Merci pour vos réponses !
Je pensais que NOT IN servait seulement pour trouver une entrée dans une autre table non ?
pas forcement, tu peux l'utiliser pour eviter les valeurs de certains chmaps comme dans ton cas.
Je l'utilise souvent dans mes fonctions de bases de données mysql.

Posté : 17 juil. 2007, 18:03
par Sékiltoyai
Oui, ou alors, pour éviter de faire faire des trucs inutiles au serveur comme chercher bêtement sur toute la table alors qu'il pourrait utiliser les index, tu peux utiliser '<>' au lieu de 'NOT LIKE'...
Bien sûr il est indispensable de mettre une clé PRIMARY sur id si ce n'est pas déjà fait...