quelles sont les differences entre les requetes my/pgsql?? - SQL/NoSQL - Programmation
Marsh Posté le 13-08-2004 à 13:35:20
salut gizmo
la derniere fois OK j'ai fait le relou
Mais là sur google ya pas de truc ou je peux trouver les differences entre les 2
Moi c'est juste au niveau de l'écriture des requetes, parce que pour les fonctions ça va
Marsh Posté le 13-08-2004 à 13:45:45
Et pourtant, on trouve la doc des deux sgdb en 30 secondes. La conversion toute faite, tu ne trouveras pas. Soit les requètes sont triviales et sont dans 90% des cas identiques, soit elles sont complexe et alors il est quasiment impossible de fournir un guide de conversion.
T'as une requète qui te pète à la gueule? tu regardes se qui la compose dans la doc mysql et tu regardes tout ce qui existe en équivalent dans postgres. Ensuite, pour ce qui reste, soit tu trouves rapidement dans le reste de la doc postgres (elle est super claire et le moteur de recherche marche assez bien), soit tu viens ici avec un question claire.
Marsh Posté le 13-08-2004 à 14:03:15
Daccord
Mais voila le truc jai une requete qui passe pas et je trouve pas d'ou peut venir l'erreur
en fait c'est à ce niveau là que ça déconne
/*
* Prepare the SQL Query from the data definition file
*/
$qparts['type'] = 'select';
$qparts['select'] = $this->create_column_list();
// Even if the key field isn't displayed, we still need its value
if ($select_recs) {
if (!in_array ($this->key, $this->fds)) {
$qparts['select'] .= ','.$this->fqn($this->key);
}
}
$qparts['from'] = $this->create_join_clause();
$qparts['where'] = $this->make_where_from_query_opts();
// build up the ORDER BY clause
if (isset($this->sfn)) {
// WTF $raw_sort_fields?
//$raw_sort_fields = array();
$sort_fields = array();
$sort_fields_w = array();
foreach ($this->sfn as $field) {
if ($field[0] == '-') {
$field = substr($field, 1);
$desc = true;
} else {
$field = $field;
$desc = false;
}
//$raw_sort_field = 'qf'.$field;
$sort_field = $this->fqn($field);
$sort_field_w = $this->fdd[$field]['name'];
$this->col_has_sql($field) && $sort_field_w .= ' (sql)';
if ($desc) {
$sort_field .= ' DESC';
$sort_field_w .= ' '.$this->labels['descending'];
} else {
$sort_field_w .= ' '.$this->labels['ascending'];
}
//$raw_sort_fields[] = $raw_sort_field;
$sort_fields[] = $sort_field;
$sort_fields_w[] = $sort_field_w;
}
if (count($sort_fields) > 0) {
$qparts['orderby'] = join(',', $sort_fields);
}
}
$to = $this->fm + $this->inc;
if ($listall) {
$qparts['limit'] = $this->fm.',-1';
} else {
$qparts['limit'] = $this->fm.','.$this->inc;
}
ensuite j'ai une fonction qui fait la requete
unction query_make($parts) /* {{{ */
{
foreach ($parts as $k => $v) {
$parts[$k] = trim($parts[$k]);
}
switch ($parts['type']) {
case 'select':
$ret = 'SELECT ';
if ($parts['DISTINCT'])
$ret .= 'DISTINCT ';
$ret .= $parts['select'];
$ret .= ' FROM '.$parts['from'];
if ($parts['where'] != '')
$ret .= ' WHERE '.$parts['where'];
if ($parts['groupby'] != '')
$ret .= ' GROUP BY '.$parts['groupby'];
if ($parts['having'] != '')
$ret .= ' HAVING '.$parts['having'];
if ($parts['orderby'] != '')
$ret .= ' ORDER BY '.$parts['orderby'];
if ($parts['limit'] != '')
$ret .= ' LIMIT '.$parts['limit'];
if ($parts['procedure'] != '')
$ret .= ' PROCEDURE '.$parts['procedure'];
break;
case 'update':
$ret = 'UPDATE '.$parts['table'];
$ret .= ' SET '.$parts['fields'];
if ($parts['where'] != '')
$ret .= ' WHERE '.$parts['where'];
break;
case 'insert':
$ret = 'INSERT INTO '.$parts['table'];
$ret .= ' VALUES '.$parts['values'];
break;
case 'delete':
$ret = 'DELETE FROM '.$parts['table'];
if ($parts['where'] != '')
$ret .= ' WHERE '.$parts['where'];
break;
default:
die('unknown query type');
break;
}
return $ret;
} /* }}} */
Et j'ai ds messages d'erreur: invalid sql query quand j'utilise mon programme
Marsh Posté le 13-08-2004 à 14:41:10
en fait jsuis pas clair
Alors tout d'abord j'ai mon phpmyeditSetup qui me genere des scripts pour chacune des tables de ma base
Pour ce Setup j'ai choisi d'utiliser la couche d'abstraction ADo c'est plus interessant jai donc remplacé les fonctions mysql par des fonctions ADo
donc mon Setup me genere des scripts mais le probleme c'est que je dois utiliser le phpmyedit.class.php pour l'affichage de mes tables
Et c'est la qu'est le probleme
Dans le .class j'ai remplacé les fonctions mysql par des pgsql et maintenant j'ai des erreurs "invalid sql query"
voila toute mon histoire
Marsh Posté le 14-08-2004 à 11:25:58
Tout ce que tu me dis ne me sert absolument à rien! Si tu ne précise pas la query qui merde, c'est impossible à deviner.
Marsh Posté le 16-08-2004 à 09:21:01
Voila la requete a probleme
En gros ma base gere un parc informatique et les tables correspondent aux differents materiels
SELECT PMEtable0.IDStation AS qf0,PMEtable0.IDImplantation AS qf1,PMEtable0.IDUtilisateur AS qf2,PMEtable0.N_Interne AS qf3,PMEtable0.N_Serie AS qf4,PMEtable0.IDType_station AS qf5,PMEtable0.IDMarque_station AS qf6,PMEtable0.IDModele_station AS qf7,PMEtable0.IDFournisseur AS qf8,PMEtable0.Date_Achat AS qf9,PMEtable0.Cout AS qf10,PMEtable0.N_Immobilisation AS qf11,PMEtable0.Duree_Garantie AS qf12,PMEtable0.N_Garantie AS qf13,PMEtable0.Contrat_Maintenance AS qf14,PMEtable0.IDConfiguration AS qf15,PMEtable0.Memoire AS qf16,PMEtable0.IDType_Disque_Dur AS qf17,PMEtable0.Date_affectation AS qf18,PMEtable0.fd_Position AS qf19,PMEtable0.Observations AS qf20,PMEtable0.etat AS qf21,PMEtable0.ordre AS qf22 FROM station AS PMEtable0 ORDER BY PMEtable0.IDStation LIMIT 0,15741.26 miliseconds
Marsh Posté le 16-08-2004 à 13:54:43
- C'est quoi ces paramètres loufoques pour LIMIT?
- Quel est le message d'erreur renvoyé?
Marsh Posté le 16-08-2004 à 14:24:58
j'ai cette erreur
ERROR: LIMIT #,# syntax is not supported
-----------------------------------------------------------
phpPGEdit error: invaid SQL query
suivi de la requete que j'ai écrite avant
Marsh Posté le 16-08-2004 à 14:25:40
et pour les parametres de limit je vois vraiment pas ce que ça peut etre, je vais chercher
Marsh Posté le 16-08-2004 à 14:40:36
Limit, en pg tout comme en mysql support le format suivant:
LIMIT nb_de_row OFFSET décalage
Donc il te suffit d'adatper ta requète en conséquence.
Marsh Posté le 16-08-2004 à 14:43:11
oui oui je viens de men rendre compte
mais c'est une autre erreur que j'ai maintenant
ERROR: column pmetable0.idstation does not exist
ça veut dire que ça ne retrouve pas ma table??
Marsh Posté le 16-08-2004 à 15:18:50
non, ca veut dire qu'il ne trouve pas la colonne. S'il ne trouvaient pas la table tu aurais eu une autre erreur.
Marsh Posté le 16-08-2004 à 15:23:17
ah oui c'est vrai
là c'est chaud parce ke la colonne existe bien et sous mysql ça marche
ça doit etre un probleme de syntaxe diferente dun SGBDR a lautre
Marsh Posté le 16-08-2004 à 15:42:41
ok mec c'est cool de donner un coup de main, par contre se foutre de la gueule de débutants dans d'autres posts c'est moyen
M'enfin c'est pas trop grave jsuis pas trop susceptible
Marsh Posté le 16-08-2004 à 16:18:57
bah y a débutant et débutant. Entre un message d'erreur du style "Stack overflow at address AC340F:C435FD" et un bête "column xxx does not exist", tu trouves pas que l'un des deux est *un peu* plus facile à comprendre?
Marsh Posté le 16-08-2004 à 16:27:42
là n'est pas le probleme
Se moquer n'a jamais pu aider personne
Moi je suis nul et je le sais, mais php j'en ai jamais fait et on m'a jeté dans un stage sans tuteur
Donc la seule maniere que j'ai pour progresser c'est de poser des questions "betes"
Encore que là c'est vraiment betes parce que je pensais à un champs quand jai di table
M'enfin c'est de l'humour potache
Bref ya pas de souci
par contre si tu pouvais me dire pkoi avec mysql ya pas de prob et avec postgresql jai cette erreur
Là ce serait cool
Marsh Posté le 16-08-2004 à 16:31:54
t'as un acces à psql (l'outil ligne de commande)?
dans ce cas, tu tapes dedans
\d station
tu auras la liste des colonnes de la table. Si elle n'y est pas c'est que l'export des données a merdé quelque part.
sinon, tu dois pouvoir voir la structure de la table avec phppgadmin également.
Marsh Posté le 16-08-2004 à 16:36:48
ya pas de prob au niveau de la table le champs id station est bien present
jvois ça avec dbtools
pas de prob de ce coté là
moi jpencherai plutot pour un pb syntaxique
mais vraiment jvois pas lequel
Marsh Posté le 16-08-2004 à 16:52:15
voila c'est à ça que je pensais mon champs se nomme exactement IDStation
Marsh Posté le 16-08-2004 à 17:00:58
Et quand tu fais un bête SELECT * FROM station LIMIT 1 ca te renvoie quoi?
Marsh Posté le 16-08-2004 à 17:50:21
avec postgres, il ne faut pas de mot cle AS pour donner un alias a une table, ca doit venir de la nan ?
=> select alias.blabla from maTable alias
Marsh Posté le 17-08-2004 à 09:19:48
souk a écrit : avec postgres, il ne faut pas de mot cle AS pour donner un alias a une table, ca doit venir de la nan ? |
ce n'est pas obligatoire mais rien n'empèche de le mettre. C'est même recommandé.
Marsh Posté le 17-08-2004 à 09:31:44
<?php
$dbl = @pg_connect("host=localhost dbname=spidi user=root
password=" );
if (!$dbl) {
echo "c'est le BMC";
}
else
{
echo "Gagné";
}
$query="SELECT * FROM station";
$query = pg_query($query);
while($row = pg_fetch_array($query,NULL,PGSQL_ASSOC))
{
echo "Name: ".$row['IDStation']."<br />";
}
?>
Ce code marche tres bien et me renvoie tout les identifiants de station
donc ma table et mes champs sont bien
Je regarde maintenant si ça a quelquechose a voir avec le AS
Marsh Posté le 17-08-2004 à 09:57:23
alors pour cette requete
SELECT PMEtable0.IDStation AS qf0,PMEtable0.IDImplantation AS qf1,PMEtable0.IDUtilisateur AS qf2,PMEtable0.N_Interne AS qf3,PMEtable0.N_Serie AS qf4,PMEtable0.IDType_station AS qf5,PMEtable0.IDMarque_station AS qf6,PMEtable0.IDModele_station AS qf7,PMEtable0.IDFournisseur AS qf8,PMEtable0.Date_Achat AS qf9,PMEtable0.Cout AS qf10,PMEtable0.N_Immobilisation AS qf11,PMEtable0.Duree_Garantie AS qf12,PMEtable0.N_Garantie AS qf13,PMEtable0.Contrat_Maintenance AS qf14,PMEtable0.IDConfiguration AS qf15,PMEtable0.Memoire AS qf16,PMEtable0.IDType_Disque_Dur AS qf17,PMEtable0.Date_affectation AS qf18,PMEtable0.fd_Position AS qf19,PMEtable0.Observations AS qf20,PMEtable0.etat AS qf21,PMEtable0.ordre AS qf22 FROM station PMEtable0 ORDER BY PMEtable0.IDStation LIMIT 015123.712 miliseconds
jai cette erreur
ERROR: column pmetable0.idstation does not exist
pourttant jai enlevé le AS dans le FROM
Marsh Posté le 17-08-2004 à 10:03:20
tu peux faire un dump de la structure de la table et le poster ici?
Marsh Posté le 17-08-2004 à 10:05:44
voila comment et créée ma table
je sais pas si c'est ça que tu veux?
CREATE TABLE "public"."station"
(
"IDStation" int8 NOT NULL ,
"IDImplantation" int8 NOT NULL DEFAULT 0,
"IDUtilisateur" int8 NOT NULL DEFAULT 0,
"N_Interne" varchar(50),
"N_Serie" varchar(50),
"IDType_station" int8 DEFAULT 0,
"IDMarque_station" int8 DEFAULT 0,
"IDModele_station" int8 DEFAULT 0,
"IDFournisseur" int8 DEFAULT 0,
"Date_Achat" bool,
"Cout" NUMERIC(20,4),
"N_Immobilisation" varchar(50),
"Duree_Garantie" NUMERIC(20,4),
"N_Garantie" varchar(50),
"Contrat_Maintenance" varchar(50),
"IDConfiguration" int8 DEFAULT 0,
"Memoire" int8,
"IDType_Disque_Dur" int8 DEFAULT 0,
"Date_affectation" bool,
"fd_Position" varchar(50) DEFAULT ''A renseigner'::character varying',
"Observations" text,
"etat" varchar(20) DEFAULT ''station'::character varying',
"ordre" INTEGER DEFAULT 1,
PRIMARY KEY ("IDStation" )
)
Marsh Posté le 17-08-2004 à 10:17:56
ah! évidemment, c'est clair maintenant. tu as mis des guillemets. Cela veut dire que tu oblige le champs à avoir la casse indiquée. Or, dans ton select, tu ne mets pas les guillemets, donc les champs sont automatiquement transformées en minuscule, et il ne les retrouve plus.
Marsh Posté le 17-08-2004 à 10:22:52
alors la kestion a 2 balles (pour changer) faut il enlever les guillemets dans le create ou les ajouter ds le select
kess ki est le plus propre
Marsh Posté le 17-08-2004 à 10:26:26
perso, je les enlèverais du create, c'est plus propre et plus universel.
Marsh Posté le 17-08-2004 à 11:59:33
waouh les problemes qui nen finissent pas
Impossible d'enlever les guillemets du create étan donné que c'est fait sous dbtools et que c'est la traduction sql bete et mechante
donc rien a faire a ce niveau là maintenant je vais ramer pour trouver ou faire les modifs dans mon .class afin que toutes les requetes soient faites de la bonne maniere
En tout cas MERCI beaucoup gizmo de mavoir consacré du temps
C'est cool
Marsh Posté le 13-08-2004 à 10:49:49
Bonjour a tous
Alors voila pour ceux qui ne me connaissent pas
Je suis toujours "le jeune stagiaire qui sait rien faire"
Aujourd'hui se pose a moi un probleme
Dans mon script j'avais des requetes mysql mais comme je me raccorde desormais a postgresql, j'aurais voulu savoir quelles sont les differences majeures entre ces 2 SGBD au niveau des requetes
Apparemment on ne peut pas toujours les transportées
Si vous connaissez des adresses de sites ou autre traitant de ce sujet...
Merci