8791 sujets

Développement web côté serveur, CMS

Bonjour a tous Smiley smile
J'ai un soucis avec avec le comparateur != qui ne marche jamais dans mes requêtes MySQL.

Dans le cas présent, j'ai une table qui contient des liens pointant vers des images, les images appartiennent à un album-photo et certaines images, une par album, sont désignées comme couverture de l'album.
Voici sa structure :
| id | lien de l'image | album | couv |

J'ai une requête qui demande d'afficher les photos d'un album. En fait, 2 requetes :
la première pour afficher la photo de couverture :

SELECT * FROM photo WHERE album = :album AND couv = "on"


la deuxième pour afficher toutes les autres :

SELECT * FROM photo WHERE album = :album AND couv != "on"


C'est cette dernière qui me pose problème. Elle n'affiche rien, et le serveur ne me renvoie pas de message d'erreur.
Petite précision : j'ai configuré ma table pour que le champ "couv" soit NULL par défaut.
En effet, sur le formulaire d'ajout d'image, il y a une checkbox à cocher si l'utilisateur veut choisir l'image envoyée comme couverture à l'album.
Si le champ "couv" n'est pas NULL par défaut, l'écriture dans la table ne se fait pas et j'ai un message d'erreur :
Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[23000]: Integrity constraint violation: 1048 Le champ 'ph_couv' ne peut être vide (null)'

Voila, si quelqu'un peut m'aider, par avance merci.
Modérateur
Salut,
As tu essayé d'écrire la requête en console ou avec un outil comme phpmyadmin et voir si tu as un résultat probant ?

Sinon essai (en console / ou avec phpmyadmin ou autres) ceci dis nous si tu obtiens le résultat attendu ?

SELECT * FROM photo WHERE album = 'le titre d\'un album' AND couv <> 'on'


<<<EDIT
@LaJota : +1

Smiley rolleyes
En lisant ton message d'erreur, je pense que ce champ 'ph_couv' qui doit être dans ta table a été créé après la création de la table avec ses données initiales. Sinon, certaines données ont été importées sans le champ . Est ce que certaines données de ce champ ('ph_couv') sont vides ou null (WHERE ISNULL/ISNOTNULL) ? Si c'est le cas, je pense qu'à terme tu devras sauvegarder ta base (dump) et faire ce genre de requête :

ALTER TABLE photo MODIFY 'ph_couv' "type de champ" NOT NULL #!!faire un select et/ou un dump avant de mettre à jour en masse [cligne]

ou un truc du style :

UPDATE photo SET ph_couv=NULL WHERE ph_couv='' #!! faire un select et/ou un dump avant de mettre à jour en masse [cligne]


Mais entre temps, je rejoins les propos de LaJota, peux tu nous en dire un peu plus sur cette table ? Si tu ne sais pas faire, c'est soit :

DESC ma_table


ou soit tu fais un dump de la table :

$mysqldump -u compte_user -p base_de_données table > /chemin/vers/fichier.sql


Ce qui est ennuyeux, ça touche à l'intégrité des données. Smiley rolleyes
EDIT;
Modifié par niuxe (14 Dec 2014 - 14:12)