Requete qui fonctionne en local et pas en distant

Résolu
cs_gomoz Messages postés 134 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 23 décembre 2009 - 29 mars 2006 à 02:25
cs_gomoz Messages postés 134 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 23 décembre 2009 - 31 mars 2006 à 21:24
Voici la coupable :
SELECT `id`
FROM `omcf_visa`
WHERE ( 0 )
OR `id` = (
SELECT `id`
FROM `omcf_visa`
WHERE `nom` = 'un'
ORDER BY `date_soum` DESC
LIMIT 1 )

OR `id` = (

SELECT `id`

FROM `omcf_visa`

WHERE `nom` = 'deux'

ORDER BY `date_soum` DESC

LIMIT 1 )

...(et ca continue pareil)

J'ai mis en gras la partie importante. En effet, en local ca marche et pas en distant. J'ai bien pensé à une histoire de version du seveur SQL mais ma requete est on ne peut plus basic (voir peut etre trop ^^).

Vous auriez une idée pour trouver l'erreur ou alors m'en suggerer une autre (je pas très doué avec mysql ). Je veux recuperer l'id du champ le plus recent pour chaque personne (date_soum est une date).

Merci d'avance

ps: si vous avez un bon tutorial sur mysql je prends aussi, petit à petit je découvre de nouvelles possibilités mais un jour au l'autre faudra bien que j'apprenne à l'utiliser (faut reconnaitre que c'est nettement plus rapide que php pour certain trucs).

10 réponses

Mindiell Messages postés 558 Date d'inscription jeudi 25 juillet 2002 Statut Membre Dernière intervention 5 septembre 2007 1
30 mars 2006 à 09:32
Bon, ton id est équivalent à ta date_soum, non ? Vu que plus tu soumets tard, plus ton id est grand.
Donc :
SELECT MAX(id)
FROM omcf_visa
GROUP BY nom

et voila :o)
3
Mindiell Messages postés 558 Date d'inscription jeudi 25 juillet 2002 Statut Membre Dernière intervention 5 septembre 2007 1
29 mars 2006 à 09:42
Ouh la la !

Tout d'abord bonjour :)

Pour ton problème, je ne suis pas sur que mySQL sur ton serveur distant accepte les sous-requetes (un SELECT dans un autre SELECT).
0
cs_gomoz Messages postés 134 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 23 décembre 2009
29 mars 2006 à 14:24
{il arrive une heure ou on ne sait plus bien s'il convient de dire bonjour ou bonne nuit =)}

En effet, j'ai testé en décomposant moi-même la requete et ça passe... mais en même temps ça ne m'avance pas plus de savoir ça ^^

Pour faire ce que je veux, j'ai pas d'autres solutions ? Je suis avec php mais ça ferait trop de requete d'en faire une par individu.
Même si vous n'avez que des pistes (des mots clefs en vrac qui pourrait fonctionner), je prends aussi
0
cs_gomoz Messages postés 134 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 23 décembre 2009
29 mars 2006 à 17:42
bon, allez, j'opte pour UNION (mais c'est pas très optimisé non ?)
(
SELECT `id`

FROM `omcf_visa`

WHERE `nom` = 'un'

ORDER BY `date_soum` DESC
LIMIT1

)
UNION
(
SELECT `id

FROM `omcf_visa

WHERE `nom` = 'deux'

ORDER BY `date_soum` DESC
LIMIT1
)
Merci quand même d'avoir répondu. Si jamais tu as une autre solution
0

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

Posez votre question
Mindiell Messages postés 558 Date d'inscription jeudi 25 juillet 2002 Statut Membre Dernière intervention 5 septembre 2007 1
29 mars 2006 à 18:18
J'ai des idées...
Pourquoi un 'limit 1' ?
Que cherches tu exactement ?
Peux tu donner un exemple concret avec 'un' et 'deux' pour voir ? :)
0
cs_gomoz Messages postés 134 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 23 décembre 2009
29 mars 2006 à 18:50
Je mets LIMIT 1 pour eviter d'avoir la totalité des enregistrements

Voici 5 données de la table (pas très facile à visualiser comme ca par contre :>)

--
-- Structure de la table `omcf_visa`
--

CREATE TABLE `omcf_visa` (
`id` mediumint(5) unsigned NOT NULL auto_increment,
`date_soum` datetime NOT NULL default '0000-00-00 00:00:00',
`village` varchar(30) NOT NULL default '',
`nom` varchar(50) NOT NULL default '',
`statut` varchar(20) NOT NULL default '',
`lvl` enum('0','1','2','3') default NULL,
`domiciliation` varchar(50) default NULL,
`titre` varchar(50) NOT NULL default '0',
`ecus` smallint(5) NOT NULL default '0',
`flux` enum('arrive','depart') default NULL,
`provenance` varchar(50) NOT NULL,
`idref` int(11) default NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=64252 ;

--
-- Contenu de la table `omcf_visa`
--

INSERT INTO `omcf_visa` VALUES (1, '2005-09-12 00:00:00', 'St_Pol', 'Kbz', 'Vivant', '2', 'Embrun', 'non', 158, 'depart', '', 2);
INSERT INTO `omcf_visa` VALUES (2, '2005-09-12 00:00:00', 'St_Pol', 'AlbertdeMontosl', 'Vivant', '0', 'St_Pol', 'non', 4, 'arrive', '', 2);
INSERT INTO `omcf_visa` VALUES (3, '2005-09-12 00:00:01', 'St_Pol', 'Eoen', 'Vivant', '0', 'Vienne', 'non', 40, 'arrive', '', 2);
INSERT INTO `omcf_visa` VALUES (4, '2005-09-12 00:00:00', 'St_Pol', 'Kbz', 'Vivant', '2', 'St_Pol', 'de Cotto', 117, 'arrive', '', 2);
INSERT INTO `omcf_visa` VALUES (5, '2005-09-12 00:00:00', 'St_Pol', 'Elfda', 'Vivant', '2', 'Tréguier', 'de la Roche Jagu', 4, 'depart', '', 2);
0
Mindiell Messages postés 558 Date d'inscription jeudi 25 juillet 2002 Statut Membre Dernière intervention 5 septembre 2007 1
29 mars 2006 à 22:37
Ok, ok, j'en demande pas tant :o)
Je voudrais juste voir un exemple de ce que tu as au début et de ce que tu veux à la fin, genre :
J'ai :
Kbz, 2
AlbertdeMontosl, 0
Eoen, 0
Je veux :
Kbz, 2
Eoen, 0

Tu vois ce que je veux dire ? ;o)
0
cs_gomoz Messages postés 134 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 23 décembre 2009
29 mars 2006 à 23:10
ok , donc j'ai :
| ID | nom | datesum |
| 01 | un | 2005-04-12 14:09:02 |
| 02 | deux | 2005-08-12 10:11:51 |
| 03 | un | 2006-09-12 15:10:56 |
| 04 | trois | 2005-10-01 09:16:04 |
//je mets 'un', 'deux' pour que ce soit plus simple, ce sont des vrais noms dans la vraie table

Je veux pour certains de ces noms la dernière valeure ajoutée (je veux 'un' et 'deux' on va dire), donc :
| ID |
| 02 |
| 03 |

donc surtout pas '01' déjà
0
cs_gomoz Messages postés 134 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 23 décembre 2009
31 mars 2006 à 21:20
(j'avais pas vu l'alerte mail)

Non, si je fais ça j'aurai aussi le MAX(id) pour la ligne 04 or je veux le savoir que pour 'un' et 'deux', pas pour 'trois'

["mailto:gomoz@free.fr" Gomoz]
0
cs_gomoz Messages postés 134 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 23 décembre 2009
31 mars 2006 à 21:24
ch'ui bete, je rajoute juste un "where nom='un' or where nom='deux'" et ça marche
Merci

Et juste en complement, au cas où je voudrai imperativement comparer la date (et pas l'id), je peux faire SELECT id,MAX(date_soum) ? (et une dernière en plus après j'arrete, est-ce que l'id est forcement incrementé au dessus à chaque fois ou il peut arrive qu'il "complete les blancs" ?)
0
Rejoignez-nous