Programmation » [SQL] probleme de jointure
[SQL] probleme de jointure
Publié le 20/12/2007 @ 19:11:43,
Par cauetHello,
J'ai un petit soucis dans ma jointure:
Bon alors le soucis, c'est que je lui demande de m'inclure la colonne Status dans mon résultat. Tout simplement.
Le problème, c'est que j'ai plusieurs Status qui répondent. Il faut que je sélectionne celui avec le plus grand id. (le dernier quoi)
J'ai testé :
(merci ovh) Mais ca ne fonctionne pas : #1111 - Invalid use of group function
Quelqu'un pourrait me guider ?
J'ai un petit soucis dans ma jointure:
- SELECT DISTINCT e. * , c.status, c.msgid, DATE_FORMAT(e.date, '%d/%m/%Y % H:% i:%s') AS date_send FROM envoi_push e LEFT OUTER JOIN confirm_push c ON c.msgid = e.status WHERE type = 'BE' ORDER by date DESC LIMIT 0,40
Bon alors le soucis, c'est que je lui demande de m'inclure la colonne Status dans mon résultat. Tout simplement.
Le problème, c'est que j'ai plusieurs Status qui répondent. Il faut que je sélectionne celui avec le plus grand id. (le dernier quoi)
J'ai testé :
- AND c.id = max(c.id)
(merci ovh) Mais ca ne fonctionne pas : #1111 - Invalid use of group function
Quelqu'un pourrait me guider ?
[SQL] probleme de jointure
Publié le 20/12/2007 @ 19:24:20,
Par cauetTiens le tomic fonctionne
[SQL] probleme de jointure
Publié le 20/12/2007 @ 19:45:05,
Par Keeperle where max ne fonctionne pas
par contre en gros tu fais une jointure de plus avec un SELECT max(id),status .....
comme ça ta requête va se faire et sélectionner que les lignes qui auront l'ID max et le status bidule, ce qui en théorie n'est vrai que pour une seule occurence.
par contre en gros tu fais une jointure de plus avec un SELECT max(id),status .....
comme ça ta requête va se faire et sélectionner que les lignes qui auront l'ID max et le status bidule, ce qui en théorie n'est vrai que pour une seule occurence.
[SQL] probleme de jointure
Publié le 20/12/2007 @ 19:49:45,
Par kortenbergQuel programme serveur sql?
[SQL] probleme de jointure
Publié le 20/12/2007 @ 20:44:24,
Par ovhEssaie une fois avec une clause HAVING.
Je n'ai rien à voir avec www.ovh.com
[SQL] probleme de jointure
Publié le 20/12/2007 @ 21:04:44,
Par cauetpffffff..surement po.
SELECT DISTINCT e. * , c.status, c.msgid, DATE_FORMAT( e.date, '%d/%m/%Y %H:%i:%s' ) AS date_send
FROM envoi_push e
LEFT OUTER JOIN confirm_push c ON c.msgid = e.status
WHERE type = 'BE'
HAVING max( c.id )
ORDER BY date DESC
LIMIT 0 , 40
il ne me renvoie plus qu'1 seul enregistrement..
Dernière édition: 20/12/2007 @ 21:05:06
SELECT DISTINCT e. * , c.status, c.msgid, DATE_FORMAT( e.date, '%d/%m/%Y %H:%i:%s' ) AS date_send
FROM envoi_push e
LEFT OUTER JOIN confirm_push c ON c.msgid = e.status
WHERE type = 'BE'
HAVING max( c.id )
ORDER BY date DESC
LIMIT 0 , 40
il ne me renvoie plus qu'1 seul enregistrement..
Dernière édition: 20/12/2007 @ 21:05:06
[SQL] probleme de jointure
Publié le 20/12/2007 @ 21:37:24,
Par ovhil ne me renvoie plus qu'1 seul enregistrement..
Ben... c'était pas ça le but ?
Je n'ai rien à voir avec www.ovh.com
[SQL] probleme de jointure
Publié le 20/12/2007 @ 21:39:19,
Par cauetben là, non!
je lui demande de tout prendre...
le limit 0,40 est pas là pour décorer
Dernière édition: 20/12/2007 @ 21:39:50
je lui demande de tout prendre...
le limit 0,40 est pas là pour décorer
Dernière édition: 20/12/2007 @ 21:39:50
[SQL] probleme de jointure
Publié le 20/12/2007 @ 21:45:02,
Par cauetenfin, je crois que t'a rien compris au bidule ové.
Tantôt, il prenait TROP d'enregistrement car je lui demandais de me prendre les STATUS de la table JOINTE. Mais il y en avait trop. (des STATUS) Il faut donc prendre le + récent.
Et ici, ça à l'air correct. Il ne prend plus que le dernier STATUS,(enfin j'espère) mais la requête en elle même ne prend plus que le premier record de la table..
Alors qu'il y à techniquement 150 000 records qui répondent à la clause WHERE type='BE' ..
Tantôt, il prenait TROP d'enregistrement car je lui demandais de me prendre les STATUS de la table JOINTE. Mais il y en avait trop. (des STATUS) Il faut donc prendre le + récent.
Et ici, ça à l'air correct. Il ne prend plus que le dernier STATUS,(enfin j'espère) mais la requête en elle même ne prend plus que le premier record de la table..
Alors qu'il y à techniquement 150 000 records qui répondent à la clause WHERE type='BE' ..
[SQL] probleme de jointure
Publié le 20/12/2007 @ 21:51:20,
Par cauetBon et si ca peut te rassurer.. le max(c.id) déconne car il me renvoie pas du tout le plus grand id
[SQL] probleme de jointure
Publié le 20/12/2007 @ 22:29:50,
Par cauetSELECT content, confirm_push.status
FROM envoi_push, confirm_push
WHERE envoi_push.status = confirm_push.msgid
AND confirm_push.msgid = envoi_push.status
LIMIT 0 , 10;
j'ai tenté l'approche autrement..
ca fonctionne mais,
- Il me renvoie une ligne de envoi_push, par confirm_push trouvé.. (donc doublons) et DISTINCT n'agis pas. il faut juste prendre le DERNIER.
- Et quand ce 1er problème sera reglé, il faudra juste renvoyer le plus grand id trouvé dans confirm_push ...
[SQL] probleme de jointure
Publié le 20/12/2007 @ 22:36:31,
Par ovhOK j'ai pigé ce que tu veux. Par contre en une seule requête je ne vois pas de solution comme ça à chaud, mais je suis pas un pro du SQL non plus
Je n'ai rien à voir avec www.ovh.com
[SQL] probleme de jointure
Publié le 20/12/2007 @ 22:38:18,
Par cauetArf.. me dit pas que c'est impossible .. J'y crois pas!
(Ou alors SQL c'est vraiment de la merde..)
Je fais ça actuellement en plusieurs requêtes, mais c'est péniblement long et douloureux pour le serveur quand tu effectue donc 1 + (40*1) requêtes !
(Ou alors SQL c'est vraiment de la merde..)
Je fais ça actuellement en plusieurs requêtes, mais c'est péniblement long et douloureux pour le serveur quand tu effectue donc 1 + (40*1) requêtes !
[SQL] probleme de jointure
Publié le 21/12/2007 @ 08:46:40,
Par Keepercauet > poste la définition de tes tables et décrit ce que tu veux exactement, je suis sur que j'ai déjà eu le cas récement.
[SQL] probleme de jointure
Publié le 21/12/2007 @ 09:26:23,
Par kortenbergJ'ai testé sur des tables bidons que j'ai en stock.
Ca me donne, pour chaque dossier la date de la dernière facture.
C'est bien ce genre de chose que tu veux?
Comme l'a proposé keeper, au début, on peut le faire avec un deuxième join mais j'ai pas confiance dans l'ordre de leur execution.
Dernière édition: 21/12/2007 @ 12:17:26
Ca me donne, pour chaque dossier la date de la dernière facture.
C'est bien ce genre de chose que tu veux?
- SELECT
- `dossier`.*,
- `factureclient`.`DateFacture`
- FROM
- `dossier`
- JOIN
- ( SELECT *
- FROM `factureclient`
- WHERE `factureclient`.FactureId IN (
- SELECT Max(FactureId)
- FROM `factureclient`
- GROUP BY `factureclient`.`DossierId`
- )
- ) AS `factureclient`
- ON `dossier`.`DossierId` = `factureclient`.`DossierId`
Comme l'a proposé keeper, au début, on peut le faire avec un deuxième join mais j'ai pas confiance dans l'ordre de leur execution.
Dernière édition: 21/12/2007 @ 12:17:26
[SQL] probleme de jointure
Publié le 21/12/2007 @ 11:50:53,
Par ovhkort'> mysql sait faire des sous-requêtes ?
Je n'ai rien à voir avec www.ovh.com
[SQL] probleme de jointure
Publié le 21/12/2007 @ 12:14:48,
Par kortenbergdepuis la version 4.1
Dernière édition: 21/12/2007 @ 12:16:40
Dernière édition: 21/12/2007 @ 12:16:40
[SQL] probleme de jointure
Publié le 21/12/2007 @ 12:57:21,
Par cauetJ'ai testé sur des tables bidons que j'ai en stock.
Ca me donne, pour chaque dossier la date de la dernière facture.
C'est bien ce genre de chose que tu veux?
Comme l'a proposé keeper, au début, on peut le faire avec un deuxième join mais j'ai pas confiance dans l'ordre de leur execution.
Ca me donne, pour chaque dossier la date de la dernière facture.
C'est bien ce genre de chose que tu veux?
- SELECT
- `dossier`.*,
- `factureclient`.`DateFacture`
- FROM
- `dossier`
- JOIN
- ( SELECT *
- FROM `factureclient`
- WHERE `factureclient`.FactureId IN (
- SELECT Max(FactureId)
- FROM `factureclient`
- GROUP BY `factureclient`.`DossierId`
- )
- ) AS `factureclient`
- ON `dossier`.`DossierId` = `factureclient`.`DossierId`
Comme l'a proposé keeper, au début, on peut le faire avec un deuxième join mais j'ai pas confiance dans l'ordre de leur execution.
la sous requpete voilà ce qu'il me faut !
Merci kortenberg, je vais essayer !!
[SQL] probleme de jointure
Publié le 21/12/2007 @ 13:07:05,
Par Keeperc'est un peu ce que j'ai proposé au début .....