Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 07/07/2007, à 15:06

Bzh

MySql + jointure sur varchar 255

Bonjour,

J'ai besoin de créer une jointure sur un champ en varchar 255 d'une table.

Le souci c'est qu'il est déconseillé de créer une clause sur un varchar car il y a une grosse perte de vitesse.

Je voudrais donc générer un entier à partir d'une chaine de caractères. Les fonctions existantes de hachages ne génèrent pas de simple entier mais des chaines de caratères (hexadécimal ).


Il y a t'il une solution PROPRE afin de générer ce fameu entier ?

Dernière modification par Bzh (Le 07/07/2007, à 17:39)

Hors ligne

#2 Le 07/07/2007, à 16:29

pouchat

Re : MySql + jointure sur varchar 255

bonjour,

il aurait fallu dès le départ intégrer un identifiant. Pour chaque table, il est toujours conseillé de mettre un champ (souvent le premier) "id" type INT avec auto_increment. Ca évite les problèmes et accélère forcément les jointures.

Refais correctement ta table avec ce nouvel id. Pour le remplissage, un petit script PHP (une simple boucle avec mise à jour de ce champ) fera parfaitement l'affaire pour générer les ID vides qu'il y a actuellement dans ta table. Par la suite dès que tu ajouteras une données, ce champs sera rempli automatique par MySQL...

Dernière modification par pouchat (Le 07/07/2007, à 16:31)

Hors ligne

#3 Le 07/07/2007, à 16:38

Bzh

Re : MySql + jointure sur varchar 255

Non non ! big_smile

J'ai l'habitude de créer des tables avec id auto-increment en index ( clé primaire )

Ce n'est pas ça le souci ! Le souci c'est que je ne veux pas créer une nouvelle table pour gérer 50 enregistrements !

Il s'agit de gérer un ensemble de news classées par catégories avec un grand max de 20 catégories ! ( je compte 50 comme marge de sécu )

Hors ligne

#4 Le 07/07/2007, à 16:42

stephG

Re : MySql + jointure sur varchar 255

Salut
Peux-tu indiquer comment sont tes tables ?
Pour les catégories, l'idéal est d'avoir une table des catégories avec un id unique,
comme te l'indique pouchat.


Ubuntu, c'est trop bien ...

Hors ligne

#5 Le 07/07/2007, à 16:48

pouchat

Re : MySql + jointure sur varchar 255

oui je vois pas le problème ?
il faut que tu crées forcément une table pour gérer tes cats. C'est le plus propre

Hors ligne

#6 Le 07/07/2007, à 17:36

Bzh

Re : MySql + jointure sur varchar 255

Est-il vraiment interressant d'avoir une table pour 20 enregistrements ?

Il s'agit d'une site pour une petite pme !

J'aime simplifié au maximum !

donc voila ma table news :

______________________________________
id | titre | categorie | id_categorie | texte | date

Grace a "id_categorie" qui est un int les requetes de type :

SELECT titre FROM news WHERE  id_categorie=2568485

sont beaucoup plus rapide que

SELECT titre FROM news WHERE  categorie="Catégorie nouveauté"

Tout en évitant une table suplémentaire avec jointure !



ps:Mince plus haut je voulais parler de clause et non pas de jointures

Hors ligne

#7 Le 08/07/2007, à 00:50

pouchat

Re : MySql + jointure sur varchar 255

oulah. Comme ça tu vas droit dans le mur.

1. D'abord, le premier objectif dans tout développement est la qualité du code, efficacité et souplesse (surtout pour une boîte)
ici plusieurs problèmes :
- c'est brouillon et beaucoup moins compréhensible que 2 tables séparées. surtout sur un schémas type MLD. (moins facile à comprendre par la suite pour les autres développeurs)
- beaucoup moins souple : ca veut dire que si tu dois mettre à jour une catégorie (faute de frappe, complétion...) faudra le faire pour chaque tuple concerné. Très lourd.
- de plus mettre 2 champs ID sur chaque tuple n'a plus d'intérêt. Dans ce cas pour obtenir la liste des cats il te faudrait simplement faire un SELECT GROUP BY categorie.

...

100000. Seulement une fois que tout marche on s'occupe des optimisations.

- donc niveau rapidité on utilisera plutôt un caching au niveau des requêtes sur le serveur SQL ou directement sur les pages au niveau HTML
- si c'est un site pour une PME on peut estimer que le nombre de d'accès lecture sera limité et ne va donc pas faire tomber ton serveur SQL.
- si c'est un gestionnaire de news, la quantité d'informations (news ou catégorie) sera plutôt limitée ( < 1.000). A ce niveau là encore, faire une simple jointure entre 2 tables très légères sera aussi rapide que ton système à une seule table.

Il vaut mieux apprendre à bien concevoir son appli dès le départ. Ca te servira sur des projets plus conséquents...

Dernière modification par pouchat (Le 08/07/2007, à 00:53)

Hors ligne