[résolu] Ptit souci avec un SELECT

Ptit souci avec un SELECT [résolu] - SQL/NoSQL - Programmation

Marsh Posté le 10-04-2009 à 10:51:54    

Bonjour voila un petit souci
j'ai dans mon code une requete toute bete avec une condition WHERE
 
ou j'ai ID / ID_VILLE / commentaire
 
j'ai fait un SELECT * (mais le champs important c'est ID car je fais instanciation de class via une collection d'iD récupérer par cette requete
 
je peux avoir des resultat du genre
 
1   005    blabla
2   028    blabla
3   003    blbala
4   003    blablabl
5   056    blabla
6   028    blabla
 
donc comme vous pouvez le voir j'ai des double de ID_VILLE et j'aimerai les virer du fait avoir un resultat du genre
 
 
1   005    blabla
2   028    blabla
3   003    blbala
5   056    blabla
 
Le distinct ne fonctionne pas vu que j'ai au moin deux champs  
Une solution ?
 
merci d'avance

Message cité 1 fois
Message édité par hyptnos le 10-04-2009 à 13:04:15
Reply

Marsh Posté le 10-04-2009 à 10:51:54   

Reply

Marsh Posté le 10-04-2009 à 11:03:05    

select * from table where id in (select disctint id from tatable)
un peu barbare mais marchera
 
mais par contre il gardera le commentaire que tu premier séléctionné

Reply

Marsh Posté le 10-04-2009 à 11:09:52    

Code :
  1. SELECT * FROM evenements WHERE evt_soiree_di='6' AND evt_codecom in (SELECT DISTINCT evt_codecom FROM evenements) AND evt_statut=0 ORDER BY evt_codecom ASC
 

sa change strictement rien :s

 

j'ai toujours des double de codecom (pas grave pour les commentaire)


Message édité par hyptnos le 10-04-2009 à 11:10:03
Reply

Marsh Posté le 10-04-2009 à 11:27:00    

quels sont les données que tu veut recuperer ?

Code :
  1. SELECT * FROM evenements WHERE  evt_codecom in (SELECT DISTINCT evt_codecom FROM evenements where evt_soiree_di='6' AND evt_statut=0 )  ORDER BY evt_codecom ASC

Message cité 1 fois
Message édité par infoman64 le 10-04-2009 à 11:27:11
Reply

Marsh Posté le 10-04-2009 à 11:33:02    

Une solution pour éviter un IN, mais pas compatible avec tous les SGBD

Code :
  1. SELECT t1.id, t1.id_ville, t2.comment
  2. FROM (SELECT DISTINCT ville.id, ville.id_ville FROM ville) t1 INNER JOIN ville t2 ON t1.id = t2.id


Optionnellement, tu peux même ajouter, juste à la suite (ça dépend te ta base en fait)

Code :
  1. AND t1.id_ville = t2.id_ville


 
NB: je n'ai pas testé !!!


Message édité par kao98 le 10-04-2009 à 11:33:57

---------------
Kao ..98 - Uplay (R6S) : kao98.7.62x39 - Origin (BF4, BF1) : kntkao98
Reply

Marsh Posté le 10-04-2009 à 11:48:16    

Tu veux garder quel "commentaire", quel ID ?
J'ai du mal à voir l'intérêt de la requête - au niveau logique fonctionnelle. Si tu pouvais l'expliquer ?
 
Parce que vu ce que tu fais, a priori ça veut dire que tu t'en fous de l'ID et du Commentaire. Donc, pas besoin de les inclure dans le SELECT.

Code :
  1. SELECT DISTINCT(ville.id_ville) FROM ville;

Et si tu as besoin de l'id et/ou du commentaire, il faudrait donner une règle pour le(s) choisir...

Reply

Marsh Posté le 10-04-2009 à 12:02:51    

hyptnos a écrit :


Le distinct ne fonctionne pas vu que j'ai au moin deux champs

 

quel sgbd? ça ne pose aucun problème avec oracle.[:doc petrus]


Message édité par skeye le 10-04-2009 à 12:02:56

---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 10-04-2009 à 12:24:19    

infoman64 a écrit :

quels sont les données que tu veut recuperer ?

Code :
  1. SELECT * FROM evenements WHERE  evt_codecom in (SELECT DISTINCT evt_codecom FROM evenements where evt_soiree_di='6' AND evt_statut=0 )  ORDER BY evt_codecom ASC



 
Idem je recupere la meme chose
je suis sous Mysql 5
 
ce que je souhaite c'est evt_id seulement (le reste je le recupère bien plus tard)
mais
pour 2 evt_id donné (et différent) je peux avoir des evt_codecom identique
or la un seul evt_id me suffirait
 
(je précise que je n'ai qu'une seule table pour les informations cité).

Reply

Marsh Posté le 10-04-2009 à 12:28:12    

hyptnos a écrit :

 

pour 2 evt_id donné (et différent) je peux avoir des evt_codecom identique
or la un seul evt_id me suffirait

 

(je précise que je n'ai qu'une seule table pour les informations cité).

 

un truc de ce genre ferait l'affaire dans ce cas non?

 

select max(evt_id), evt_codecom
from evenements
group by evt_codecom

 

(mais je comprends pas à quoi te sert l'evt_id, dans ce cas, et pourquoi tu fais pas tout simplement un select distinct evt_codecom from evenements)

 

Message cité 1 fois
Message édité par skeye le 10-04-2009 à 12:29:57

---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 10-04-2009 à 12:32:50    

skeye a écrit :

 

un truc de ce genre ferait l'affaire dans ce cas non?

 

select max(evt_id), evt_codecom
from evenements
group by evt_codecom

  



Heu sa va pas empecher les doublon si ?
sinon il me fout une erreur avec ce que tu me dis d'essayer

Citation :


Mixing of GROUP columns (MIN(),MAX(),COUNT(),...) with no GROUP columns is illegal if there is no GROUP BY clause

 
Citation :


(mais je comprends pas à quoi te sert l'evt_id, dans ce cas, et pourquoi tu fais pas tout simplement un select distinct evt_codecom from evenements)

 

car ma méthode PHP de la classe qui va bien récupère les ID et non pas les code COM

Message cité 1 fois
Message édité par hyptnos le 10-04-2009 à 12:34:00
Reply

Marsh Posté le 10-04-2009 à 12:32:50   

Reply

Marsh Posté le 10-04-2009 à 12:41:23    

hyptnos a écrit :


Heu sa va pas empecher les doublon si ?
sinon il me fout une erreur avec ce que tu me dis d'essayer

Citation :


Mixing of GROUP columns (MIN(),MAX(),COUNT(),...) with no GROUP columns is illegal if there is no GROUP BY clause

 


 

Si si ça doit empêcher les doublons...
euh montre ce que tu as exécuté, parce-que je t'en avais mis une, de clause group by.[:joce]

hyptnos a écrit :


car ma méthode PHP de la classe qui va bien récupère les ID et non pas les code COM


ok, mais comment tu choisis entre 2 evt_id qui ont le même code com? Ma requête plus haut prend arbitrairement celui dont l'id est le plus grand, mais tu dois bien avoir un critère quelconque??

Message cité 1 fois
Message édité par skeye le 10-04-2009 à 12:42:10

---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 10-04-2009 à 12:48:04    

skeye a écrit :


 
Si si ça doit empêcher les doublons...
euh montre ce que tu as exécuté, parce-que je t'en avais mis une, de clause group by.[:joce]


 

skeye a écrit :


ok, mais comment tu choisis entre 2 evt_id qui ont le même code com? Ma requête plus haut prend arbitrairement celui dont l'id est le plus grand, mais tu dois bien avoir un critère quelconque??


 
Non en fait petit souci d'analyse au moment du developpement ^^ et j'ai pas envie de me retaper tous le dev de la page ^^
en fait c'est le codecom pour le bien de l'application qui m'importe mais dans mon cas le code com est récupérer ensuite grace a l'id de l'evenement  
c'est en gros une déviation au probleme pour gagner du temps
actuelement tout fonctionne sauf que j'ai des doublons ^^
autant pour mois j'ai zapper le group by
je teste et je redis

Reply

Marsh Posté le 10-04-2009 à 12:53:08    

hyptnos a écrit :

Non en fait petit souci d'analyse au moment du developpement ^^ et j'ai pas envie de me retaper tous le dev de la page ^^

Le problème, c'est que le peu de temps que tu vas gagner maintenant, tu vas le reperdre derrière - par exemple en essayant de bidouiller des requêtes  :D

Reply

Marsh Posté le 10-04-2009 à 12:53:54    

MERCI sa fonctionne
 
bon par contre y t'il moyen d'inclure un SELECT COUNT sur le meme genre de requete car evidement le select count(max(evt_id))...... sa fonctionne pas

Reply

Marsh Posté le 10-04-2009 à 12:56:13    

hyptnos a écrit :

bon par contre y t'il moyen d'inclure un SELECT COUNT sur le meme genre de requete car evidement le select count(max(evt_id))...... sa fonctionne pas


 
select  evt_codecom, max(evt_id), count(evt_id)
from evenements
group by evt_codecom


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 10-04-2009 à 13:03:55    

oui mais non lol j'ai besoin du count avant l'exécution de la requete
mais c'est pas grave j'ai contourné le probleme encore une fois  
c'est barbare mais sa fonctionne.
 
Sa m'apprendrai a baclé l'analyse :s
 
en tout cas merci pour les conseils / solution
 
A bientot

Reply

Marsh Posté le 10-04-2009 à 13:10:58    

hyptnos a écrit :

oui mais non lol j'ai besoin du count avant l'exécution de la requete


hein?[:pingouino]
Tu veux compter des choses dans la base AVANT de faire une requête?[:el g]


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 10-04-2009 à 13:15:07    

skeye a écrit :


hein?[:pingouino]
Tu veux compter des choses dans la base AVANT de faire une requête?[:el g]


 
Oui comment je peux expliqué simplement ^^  
alors en fait c'est un listing que j'affiche a l'écran donc dans un beau tableau bourrer de CSS
et avant le tableau j'ai un TBODY qui dis le nombre de ligne (avant)
ensuite j'ai le resultat de la requete qui est en fait a chaque ligne une instenciation d'une classe
la requete permet la recolte d'id pour effectuer une collection d'objet en fait
et au fure et a mesure de la requete j'incrémente un compteur qui me donne encore une fois le nombre de ligne
 
de ce fait j'ai l'info en haut et en bas (pourquoI?) et bien je peux avoir 800 ligne dans mon tableau (qui est triable et filtrable en passant) donc il m'a ete demander d'avoir le nombre d'information avant et apres
donc ce que je faisait avant etait un simple select count puis affichage pour mon select tel que demander
 
Mais j'ai resolu le soucis

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed