Problème de requete pour petites annonces

sophievar83hyeres Messages postés 42 Statut Membre -  
sophievar83hyeres Messages postés 42 Statut Membre -
Bonjour,

Voici ma requête en abrégée qui affiche toute les annonces du client dans son espace client:
SELECT annonce.*, categorie.*
FROM annonce, categorie
where annonce.MailAnnonceur= $_SESSION['MM_username'] and annonce.idcate=categorie.id

ce qui donne le listing de ses annonces (jusque là c'est bon):
annonce 1 : A vendre blablabla
categorie: matériel

annonce 2 : A vendre blablabla
categorie: papier

annonce 2 : A vendre blablabla
categorie: papier

Mon problème c'est que sur la même page, j'aimerai afficher toutes les catégories dans lesquelles le client à des annonces mais ma requête me donne en résultat toutes les catégories par répétition dont il a des annonces. C'est à dire:

Affichez vos annonces par catégorie:
Catégorie Matériel
Catégorie papier
Catégorie papier (la catégorie papier se répète car il a 2 annonces mais il faudrai qu'elle s'affiche qu'une seule fois)

le résultat devrait être celui là :
Catégorie Matériel
Catégorie papier

en clair je veux afficher toutes les catégories dans lequel le client à des annonces.

Si vous pouvez m'aider, un grand merci

20 réponses

Dalida Messages postés 7114 Date d'inscription   Statut Contributeur Dernière intervention   923
 
salut,

essaie d'ajouter "DISTINCT", je ne trouve pas de doc mais ça donne quelque chose comme :
SELECT DISTINCT `champ` FROM `table`;
0
sophievar83hyeres Messages postés 42 Statut Membre
 
Merci vraiment cela fonctionne très bien.

En revanche, via la même requete j'insère un compte (nombre d'annonce) pour chaque catégorie mais cela me donne un chiffre bidon.
0
Dalida Messages postés 7114 Date d'inscription   Statut Contributeur Dernière intervention   923
 
via la même requete j'insère un compte (nombre d'annonce) pour chaque catégorie mais cela me donne un chiffre bidon
mets le dans une requête à part.
0
sophievar83hyeres Messages postés 42 Statut Membre
 
Vous êtes parti ?
0
sophievar83hyeres Messages postés 42 Statut Membre
 
J'essaye de la faire mais je n'y arrive pas.

Affiche les catégories d'annonces de du client (cà c'est ok)
SELECT DISTINCT annonce.*, categorie.*
FROM annonce, categorie
where annonce.MailAnnonceur= $_SESSION['MM_username'] and annonce.idcate=categorie.id

Affiche le nombre d'annonce pour chaque catégorie du client : (cela ne marche pas. ma requête est fausse)
SELECT Annonce.*, categorie.*
FROM annonce, categorie
where Annonce in (categorie.id )

Comment dois je formuler ma seconde requete pour afficher le nombre d'annonce du client par catégorie

merci
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
sophievar83hyeres Messages postés 42 Statut Membre
 
Non cela donne sur chaque ligne des catégories le même nombre qui correspond au total d'annonce du client et non le nbre par catégorie.

catégorie pour papier : 62
catégorie pour boisson: 62
catégorie pour porte : 62
0
Dalida Messages postés 7114 Date d'inscription   Statut Contributeur Dernière intervention   923
 
peut être avec quelque chose comme :
SELECT COUNT(categorie.id) FROM categorie WHERE categorie.id IN (
SELECT DISTINCT categorie.id 
FROM annonce, categorie
where annonce.MailAnnonceur = $_SESSION['MM_username'] and annonce.idcate=categorie.id );

et comme ça tu pourrais ajouter ce qu'il faut pour remplacer la première requête.
0
sophievar83hyeres Messages postés 42 Statut Membre
 
Merci beaucoup. tout marche, me voilà soulagée.

Merci :-))
0
Dalida Messages postés 7114 Date d'inscription   Statut Contributeur Dernière intervention   923
 
bon courage pour la suite !
-;o)
0
sophievar83hyeres Messages postés 42 Statut Membre
 
Excusez moi,

je me suis trop emballée. J'ai un message d'erreur.
Je vais tenter de réfflechir sur cette requete et de corriger mon erreur.

Si je n'y arrive pas, puis je vous recontacter demain?
merci
0
Dalida Messages postés 7114 Date d'inscription   Statut Contributeur Dernière intervention   923
 
bien sûr le forum est ouvert 7j/7 et 24h/24, si je ne suis pas là tu trouveras toujours quelqu'un d'autre pour t'aider !

si tu as une erreur, fais un copier/coller du message d'erreur complet.
0
sophievar83hyeres Messages postés 42 Statut Membre
 
Bonjour,

Mon messge d'erreur est le suivant:

Operand should countain 1 column(s)
0
sophievar83hyeres Messages postés 42 Statut Membre
 
En clair voici les requetes:

SELECT COUNT(categorie.id) FROM categorie WHERE categorie.id IN( SELECT DISTINCT annonce.*,categorie.*
FROM categorie, annonce
WHERE annonce.idcate=categorie.id and annonce.MailAnnonceur= $_SESSION['MM_username'] )

= ERREUR : Notice: Undefined index: id

**************************

SELECT COUNT(categorie.id) FROM categorie WHERE categorie.id IN ( SELECT DISTINCT annonce.*,categorie.*
FROM categorie, annonce
WHERE annonce.idcate=categorie.id and annonce.MailAnnonceur= $_SESSION['MM_username'] )

= ERREUR : Operand should contain 1 column(s)

j'attends ton aide Matthieu. (merci:-))
0
Dalida Messages postés 7114 Date d'inscription   Statut Contributeur Dernière intervention   923
 
salut,

pour que ta clause IN puisse fonctionner, il faut que la requête entre parenthèses ne renvoie qu'un champ d'une seule table, sinon MySQL ne sait pas laquelle choisir.
WHERE categorie.id IN( SELECT DISTINCT annonce.*,categorie.*
FROM categorie, annonce
WHERE annonce.idcate=categorie.id and annonce.MailAnnonceur= $_SESSION['MM_username']

là tu lui mets tous les champs de deux tables alors qu'il ne lui faut qu'une liste de "categorie.id".
(et soit dit en passant il ne faut jamais utiliser "*", c'est une mauvaise habitude)

j'attends ton aide Matthieu. (merci:-))
punaise, ça rigole plus…
par contre je vois pas où tu m'as trouvé 2 T !
-:oD
0
sophievar83hyeres Messages postés 42 Statut Membre
 
Je suis contente de te voir sur ce forum,

WHERE categorie.id IN( SELECT DISTINCT categorie.id
FROM categorie, annonce
WHERE annonce.idcate=categorie.id and annonce.MailAnnonceur= $_SESSION['MM_username']

Et voici le nouveau message d'erreur.

= ERREUR : Notice: Undefined index: id

par contre je vois pas où tu m'as trouvé 2 T ! (J'ai 2 tables oui, 1 pour les annonces et 1 pour les catégories)
0
Dalida Messages postés 7114 Date d'inscription   Statut Contributeur Dernière intervention   923
 
peux-tu me remettre la requête en entier stp ?

(pour les deux T, c'était dans mon prénom…)
0
sophievar83hyeres Messages postés 42 Statut Membre
 
C'était ambigu 2 T pour table et/ou 2 T pour ton prénom :-))

*** CA C' EST OK ***
/// affiche toutes les catégories dans lesquelles le client à des annonces:

Affiche les catégories d'annonces de du client (cà c'est ok)
SELECT DISTINCT annonce.*, categorie.*
FROM annonce, categorie
where annonce.MailAnnonceur= $_SESSION['MM_username'] and annonce.idcate=categorie.id

/// transformation de la même requete qui doit afficher le nombre d'annonces que le client à dans chaque catégorie:
SELECT COUNT(categorie.id) FROM categorie WHERE categorie.id IN( SELECT DISTINCT categorie.id
FROM categorie, annonce
WHERE annonce.idcate=categorie.id and annonce.MailAnnonceur= $_SESSION['MM_username']

= ERREUR : Notice: Undefined index: id

---------------------------------------------------------------------------------------------

J'affiche le résultat que l'on doit voir sur la page, cela sera peut être plus clair:

PAGE COMPTE CLIENT

Vous avez 4 annonces: ( et c'est cette requête qui ne va pas, avec ta première requete cela m'affichait bien la liste mais ta nouvelle requete qui doit m'afficher le nbre d'annonce par catégorie ne marche pas)
Triez par catégorie:
Table (1 annonce)
papier (2 annonces)
carton (1 annonce)

(affichage des annonces du client. ca c'est ok, c'est 1 requete à part)
aNONNCE 1 : blalbla - caté: table
aNONNCE 2 : blalbla - caté: papier
aNONNCE 3 : blalbla - caté: papier
aNONNCE 4 : blalbla - caté: carton
0
Dalida Messages postés 7114 Date d'inscription   Statut Contributeur Dernière intervention   923
 
dans :
SELECT COUNT(categorie.id) FROM categorie WHERE categorie.id IN( SELECT DISTINCT categorie.id
FROM categorie, annonce
WHERE annonce.idcate=categorie.id and annonce.MailAnnonceur= $_SESSION['MM_username'] 

il manque la parenthèse de fin mais je suppose quelle a sauté avec le copier/coller.

c'est peut être d'utiliser deux fois la même table et le même champ qui le perturbe, on peut Essayer avec un alias.
SELECT COUNT(`main`.`id`) FROM `categorie` AS `main` WHERE `main`.`id` IN( SELECT DISTINCT `categorie`.`id`
FROM `categorie`, `annonce`
WHERE `annonce`.`idcate`=`categorie`.`id` and `annonce`.`MailAnnonceur`='$_SESSION['MM_username']');

j'ai ajouté les ` et ' en plus.
0
sophievar83hyeres Messages postés 42 Statut Membre
 
J'ai toujours le même mesage d'erreur

= ERREUR : Notice: Undefined index: id

Oui j'avais bien fermé la parenthèse.
0
Dalida Messages postés 7114 Date d'inscription   Statut Contributeur Dernière intervention   923
 
tu testes directement dans PHPMyAdmin ?
0
sophievar83hyeres Messages postés 42 Statut Membre
 
Oui
0
Dalida Messages postés 7114 Date d'inscription   Statut Contributeur Dernière intervention   923
 
colle le message d'erreur complet stp
0
sophievar83hyeres Messages postés 42 Statut Membre
 
Je viens de t'envoyer un message privé, tu comprendras pourquoi.

Ne cite pas le nom des sites STP.
0