Sélectionner toutes les entrées sauf une

Eléphanteau du PHP | 21 Messages

17 juil. 2007, 15:16

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 :)
Modifié en dernier par maelinn le 17 juil. 2007, 16:30, modifié 2 fois.

Avatar du membre
ViPHP
ViPHP | 3008 Messages

17 juil. 2007, 15:21

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"

d0m
Mammouth du PHP | 1141 Messages

17 juil. 2007, 15:24

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. ");"

Eléphanteau du PHP | 21 Messages

17 juil. 2007, 16:28

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

d0m
Mammouth du PHP | 1141 Messages

17 juil. 2007, 16:36

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.

ViPHP
ViPHP | 5924 Messages

17 juil. 2007, 18:03

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