8768 sujets

Développement web côté serveur, CMS

Bonjour,

J'ai une requête pour une table :

// lancement de la requete
$sql = 'SELECT l, d, p, s FROM fruits WHERE l = "poire"'; // Code article

Je veux vue le nombre de données faire deux tables pour alléger la base

Ma requête est donc sur deux tables pour le même champ

// lancement de la requete
$sql = 'SELECT l, d, p, s FROM fruits, legumes WHERE l = "Pomme"'; // Code article

Pomme sera t'il recherché dans la table fruits et legume ? Le champ de recherche est toujours l dans les deux cas.

J'ai lue un tas de truc sur le net mais c'est pas claire vue le nombre de choix possible.

C'est une demande basique, mais j'ai du mal à comprendre les explications sur le net car trop confus à mon goût.

Merci par avance.
Modifié par CVS (12 Jul 2012 - 20:39)
Euh... MySQL peut largement gérer plusieurs milliards d'enregistrements par table. T'as aucune raison de splitter tes tables comme ça.

Si tes requêtes sont lentes avec quelques millions d'enregistrements c'est que tes tables ou tes requêtes sont mal construites.
Je veux faire deux tables pour faciliter l'enregistrement de mon coté.

J'enregistre les légumes avec les légumes et les fruits avec les fruits.

Melon est un fruit ou un légume ? Je veux interroger les deux tables pour savoir si je l'ai enregistré dans l'une ou l'autre table.
Ben tu fais juste un champ "type" ou tu rentres la valeur "legume" ou "fruit" quand tu fais un enregistrement. C'est un peu le principe d'une base de données. Smiley langue
Modifié par jb_gfx (11 Jul 2012 - 21:06)
le mieux étant encore d'entrer un identifiant pour légume et un identifiant pour fruits et d'avoir une petite table types en plus
Modérateur
@jb_fx : +1

forme normalisée d'une table :
1. Avoir des données canoniques (cette notion est très subjective. Donc peut varier suivant les cas)
2. pas de multi colonnes qui font une ligne unique
3. pas de données en dehors du contexte de la table : (ex : table légumes avec comme donnée : 205 GTI 1.8)
4. un id unique (clef primaire)
5. je sais plus.... Smiley decu

Pour finir, si tu places des index aux bons endroits et que tu respectes ces formes normalisées, tu amélioreras considérablement la qualité de tes requêtes.
xirt a écrit :
le mieux étant encore d'entrer un identifiant pour légume et un identifiant pour fruits et d'avoir une petite table types en plus


Tu peux très bien avoir un champs de type ENUM avec tes types.
Je vais m'orienter vers un identifiant pour la nature de mes recherches avec une seule table.

L pour légume et F pour fruit, c'est ce qu'il y a de plus simple pour moi qui suis pas un grand spécialiste des tables SQL.

Je pourrais faire une recherche sur L ou sur F et j'aurai mes champs.

Merci du tuyau.
Je viens de créer une colonne t pour type.

Les légumes auront le code 1 et les fruits le code 2

Lors de ma saisie, je veux lorsque je tape code 1 ça m'affiche légumes et lorsque je tape code 2 ça m'affiche fruits, cela évite les fautes de frappe.

J'ai vue un tas de truc sur le net, mais c'est pas claire, quelqu'un peut il m'expliquer la méthode.

Je sais que l'on appel ça champ à choix multiple.

Merci par avance.
Modifié par CVS (12 Jul 2012 - 10:21)
Merci il faut donc taper :

mysql> SELECT * FROM nom_de_table WHERE enum_col=0;

emun_col ( indique la colonne ou se trouve la liste à choisir ? )

Je créer une autre table avec la liste de choix ? Fruits et légumes ?

Je suis vraiment pas très doué Smiley decu

Merci de ton aide.
CVS a écrit :
Je viens de créer une colonne t pour type.

Les légumes auront le code 1 et les fruits le code 2

Lors de ma saisie, je veux lorsque je tape code 1 ça m'affiche légumes et lorsque je tape code 2 ça m'affiche fruits, cela évite les fautes de frappe.


Il va falloir lire un peu la documentation de MySQL.

Pour ce que tu veux faire c'est une requête du genre :


// selectionne les légumes
SELECT * FROM ma_table WHERE t = 1

// selectionne les fruits
SELECT * FROM ma_table WHERE t = 2
Merci, j'ai pigé le truc.

Je viens de créer un formulaire pour enregistré directement dans ma base SQL et ça marche nickel, j'avance doucement !!!!

Merci encore.