PDA

Afficher la version complète : mySQL : problême de requête



belphegor
21/12/2007, 18h27
Bonjour tout le monde,
Je sais que je ferais mieux de poster mon problême sur le forum de mySQL, mais je le fais ici parce que j'aime cette communauté.

Alors voilà, m'ennuyant un peu en ce moment, j'ai décidé de me lancer dans le développement d'une sorte de blog. Je pourrais le télécharger tout fait ou m'inscrire à un site, mais voilà, j'ai envi de le faire moi-même, le faire comme je pense que ça marche. Bref !

J'ai créé mes tables en SQL :

create table personne (
pseudo varchar(30),
pwd varchar(30),
email varchar(300),
image varchar(300),
date timestamp default current_timestamp,
primary key (pseudo));

create table billet (
id serial,
titre varchar(300),
resume varchar(3000),
date timestamp default current_timestamp,
pseudo varchar(30),
primary key (id),
foreign key (pseudo) references personne(pseudo));
J'ai ensuite inséré deux enregistrements dont un qui m'étonne énormément! Avec l'intégrité référentielle, l'enregistrement "jojo" aurait dû être refusé puisqu'il n'existe pas dans la table "personne" :

insert into personne (pseudo, pwd, email, image) values ("belphegor", "mot de passe", "mon email@fr.st", "mon image");
insert into billet (titre, resume, pseudo) values ("Mon premier post", "je suis en train d'écrire mon premier post", "jojo");
Mais voilà, mySQL a accepté la transaction. C'est bizarre!

Je décide ensuite de tester une petite requête pour récupérer mes données :

select billet(titre), billet(resume), personne(pseudo), personne(email) from billet, personne where billet(pseudo)=personne(pseudo);
Mais ça ne marche pas, mySQL me dit "FUNCTION belphegor_phantom.billet doesn't exist".

Alors, je suis sur que mySQL c'est bien, sinon ça ne serait pas autant utilisé, mais là franchement, je regrette mon bon vieux PostgreSQL.
Heureusement, sur le site de Free pour les pages personnelles, on peut choisir entre base de données mySQL ou PostgreSQL. Si je trouve pas de solutions, je change...

J'espère que vous pourrez m'aider.
Bonne soirée, bon week end et passez de bonnes fêtes.

JuTs
21/12/2007, 22h15
...

J'ai ensuite inséré deux enregistrements dont un qui m'étonne énormément! Avec l'intégrité référentielle, l'enregistrement "jojo" aurait dû être refusé puisqu'il n'existe pas dans la table "personne" :

insert into personne (pseudo, pwd, email, image) values ("belphegor", "mot de passe", "mon email@fr.st", "mon image");
insert into billet (titre, resume, pseudo) values ("Mon premier post", "je suis en train d'écrire mon premier post", "jojo");
Mais voilà, mySQL a accepté la transaction. C'est bizarre![/b]

Quel type de table utilises-tu ? MyISAM ? InnoDB ? ... ?
MySQL ne supporte pas les clé étrangère avec MyISAM. C'est peut-être de là que vient le problème.


<div class='quotetop'>Citation (belphegor @ 21/12/2007 à 17:27) <{POST_SNAPBACK}> (index.php?act=findpost&pid=160104)</div>
Je décide ensuite de tester une petite requête pour récupérer mes données :

select billet(titre), billet(resume), personne(pseudo), personne(email) from billet, personne where billet(pseudo)=personne(pseudo);
Mais ça ne marche pas, mySQL me dit "FUNCTION belphegor_phantom.billet doesn't exist".[/b]


La requête correcte serait plutôt :


select billet.titre, billet.resume, personne.pseudo, personne.email from billet, personne where billet.pseudo=personne.pseudo;


en faisant billet(titre) tu indiques à MySQL que tu veux appeler la fonction billet et lui passer titre comme paramètre.

belphegor
22/12/2007, 02h58
Bonsoir,
Je n'ai que quatre mots et permet moi de te les dire :
JE T'AIME AMICALEMENT !

Ca marche pour la requête, j'avais déjà essayé comme ça, parce que je faisais toujours comme ça sur PostgreSQL, mais visible ça devait être le type de table qui posaient problème.
Pour que ça marche, à la fin de la requête de création j'ai ajouté engine = memory :

create table personne (
pseudo varchar(30),
pwd varchar(30) not null,
email varchar(300) not null unique,
image varchar(300),
date timestamp default current_timestamp not null,
primary key (pseudo)) engine = memory;

En revanche, mySQL accepte toujours l'insertion d'un enregistrement sans prendre en compte l'intégrité référentielle. Ce n'est pas très grave!

En tout cas, merci beaucoup!

JuTs
22/12/2007, 11h08
Essaie avec InnoDB

<div class='quotetop'>Citation </div>
create table personne (
pseudo varchar(30),
pwd varchar(30) not null,
email varchar(300) not null unique,
image varchar(300),
date timestamp default current_timestamp not null,
primary key (pseudo)) type=InnoDB;[/b]

belphegor
23/12/2007, 02h45
Merci :-)

Voilà l'avancement de mon "blog" : http://belphegor.phantom.free.fr/blog/
Si vous avez des conseils ...
Je ne sais pas trop s'il faut que j'utilise les tableaux (actuels) ou les cadres.
Auriez-vous des idées ?

J'ai très envie de faire un blog potable, parce que le développement c'est facile, mais le design ... C'est autre chose pour moi!
Bref, j'attends vos commentaires.

Merci.

JuTs
23/12/2007, 17h24
Laisse tomber la mise en page avec les tableaux, c'est lourd et dépassé. Rien ne vaut un code HTML léger avec un peu de CSS :)

deux sites très utile pour apprendre :

http://www.openweb.eu.org/
http://www.alsacreations.com/

Il y en a d'autre, bien sûr, mais ces deux sont vraiment bien.

oh!rocks
23/12/2007, 17h40
Si tu débutes en XHTML/CSS, un tour par l'indispensable Site du Zéro (http://www.siteduzero.com/tuto-3-6-0-apprenez-a-creer-votre-site-web.html), s'impose !


à plus,

oh!rocks

salv-ice
23/12/2007, 20h33
Laisse tomber la mise en page avec les tableaux, c'est lourd et dépassé[/b]

Les tableaux sont toujours nécéssaires dans certains cas... On ne peut pas tout faire à coup de "<div>", ils sont même un handicap parfois.
Je préconise plutot un mélange des deux!

Pour ta présentation belphégor, évite d'afficher toutes les bordures des tableaux, tu devrais plutot essayer de jouer avec des images ou couleurs de fond et afficher certaines bordures colorées. Mais tout ça est évidemment très subjectif !

Bon développement ! :lol:

belphegor
23/12/2007, 20h44
Coucou,
Je ne connaissais pas les deux premiers, mais le Site du Zéro oui :-) Je l'ai même utilisé pour créer le début de mon site. Vraiment très bien!

Donc si je comprends bien, il faut que j'utilise un peu de tout!
Je vais me pencher sur le sujet alors.

Parce que je m'en sors plutôt bien pour le php et l'html, mais le design c'est pas mon truc. Et le CSS c'est nouveau pour moi.

Merci beaucoup pour les infos.

Joyeux Noêl à tous!

JuTs
24/12/2007, 01h33
Les tableaux sont toujours nécéssaires dans certains cas... On ne peut pas tout faire à coup de "<div>", ils sont même un handicap parfois.
Je préconise plutot un mélange des deux![/b]

On est d'accord. Mais pas pour la structure de la page.
Les tableaux sont à l'origine, prévu pour faire de la mise en forme de données. genre, tu fais le site de ton équipe de foot, ben tu mets le classement dans un tableau.
Article sur le sujet (sur la mise en forme, hein, pas sur le foot :D ) : http://www.openweb.eu.org/articles/problemes_tableaux/


Dans le cas du blog de belphegor, une mise en forme sans tableau convient parfaitement. Exemple ici : http://css.alsacreations.com/Modeles-de-mise-en-page-en-CSS
regarde l'exemple numéro 3

belphegor
18/04/2008, 20h56
Bonsoir,

Depuis hier, j'ai repris le développement de mon blog à partir du début parce que je l'avais abandonné depuis longtemps, et aujourd'hui je l'ai enfin terminé.

Si y a des curieux...

N'hésitez pas à vous inscrire.

http://belphegor.phantom.free.fr/blog/

Et si vous avez des suggestions ...

En tout cas merci pour tout ces conseils précédents. Ca m'a été très utiles.

Bonne soirée à tous.

salv-ice
20/04/2008, 20h36
C'est très bien ! ;)

Très belle présentation. Je te tire mon chapeau !!!

belphegor
24/04/2008, 11h15
Merci :)

Euh, si vous voyez des trucs bizarres, genre des erreurs, des failles ... Si vous pouviez me prévenir.
J'en ai corrigé une il n'y a pas longtemps, elle était énorme comme ma ... jambe :P

C'est normal que quand on utilise des données sessions (DS), ça marche aussi dans les données GET ?
Je m'explique, j'utilise des DS pour gérer l'authentification, et quand je mets le nom des DS dans l'url, c'est à dire en données GET, le php les met dans les DS, c'est étrange ça, non ?

J'ai bloqué le truc en faisant

if (isset($_GET['auth'])
$auth = false;
afin de protéger d'un détournement. Mais peut-être qu'il y a mieux ?!
Merci encore :)