Sammuel

  • Nombre de sujets
    26
  • Nombre de messages
    114
  • Nombre de commentaires
    1
  • Nombre de news
    Aucune
  • Niveau en PHP
    Débutant

Ses derniers messages sur les forums

Sammuel
le 10/03/2008 à 13:31
Probleme de jointure innoDB
Voila comment j'ai procédé :

Au départ, toutes mes tables étaient de type MyISAM. J'ai donc :
* converti chaque table MyISAM en innoDB en faisant : "ALTER TABLE `nom_table` SET TYPE=InnoDB;"
* vidé toutes les tables
* exporté les structures de toutes les tables avant de les supprimer. Depuis le fichier SQL exporté, j'ai ajouté un FOREIGN KEY ou cela était necessaire.
* importé toutes les structures
* importé toutes les données
Sammuel
le 10/03/2008 à 12:49
Probleme de jointure innoDB
Non justement, normalement, je ne dois pas en avoir besoin, car j'utilise innoDB et donc avec les clé étrangères (FOREIGN KEY), les liens entre les tables devraient se faire automatiquement !

Sinon le problème n'est pas du au nom des colonnes ! car je les ai toutes rennomées en utilisant AS dans la requete. Et j'ai le meme probleme.
Sammuel
le 10/03/2008 à 01:31
Probleme de jointure innoDB
Salut,

Désolé de vous déranger avec mes problèmes de requêtes, mais je n'arrive pas à en faire fonctionner une qui peut paraître toute simple ! Et j'aurais besoin de votre aide pour comprendre pourquoi cela ne veut pas fonctionner !

Ma BDD test se trouve ici :
http://www.lephpfacile.com/wall/wall-1520.php
... avec quelques enregistrements.

Quelques précisions :
La table categorie 3 liste toutes les sous catégories de la catégorie 2.
La table categorie 2 liste toutes les sous catégories de la catégorie 1.
La table categorie 1 liste toutes les catégories générales.

Chaque enregistrement de la categorie 2 appartient obligatoirement à une (et une seule) categorie 1.
Chaque enregistrement de la categorie 3 appartient obligatoirement à une (et une seule) categorie 2. Mais un enregistrement de la categorie_2 n'a pas forcément de lien avec la categorie_3 ! Donc un enregistrement de la categorie_2 peut ne pas avoir de sous catégorie (categorie_3).

Un article appartient obligatoirement à une categorie 2 et peut appartenir à une categorie 3.

Un article ayant un status égal à 0 signifie qu'il est activé. Si il est égal à 1, c'est qu'il est désactivé et qu'il ne sera pas pris en compte, afficher sur le net.

Ma requête actuelle... qui ne fonctionne pas :
SELECT categorie_1.nom AS categorie_1_nom,categorie_2.nom AS categorie_2_nom,COUNT(article.id) AS total
FROM article
LEFT JOIN categorie_3 ON article.categorie_3_id
LEFT JOIN categorie_2 ON article.categorie_2_id
LEFT JOIN categorie_1 ON categorie_2.categorie_1_id
WHERE article.status = '0'
GROUP BY categorie_1,categorie_2,categorie_3
ORDER BY categorie_1,categorie_2,categorie_3 ASC


J'ai essayé de m'inspirer de la requete de LupusMic qu'il m'a proposé dans mon précédent post, mais cela ne veut pas fonctionner.

J'ai l'impression que MYSQL n'arrive pas à faire le lien entre les tables !

Merci pour votre aide smiley
Sammuel
le 08/03/2008 à 15:47
Requete ok sous PHP4, et ne fonctionne plus sous PHP5
Oui pour le trigger, j'ai vu un exemple !

Sinon ce qui me dérange dans cette technique de stockage innoDB/MyISAM c'est de devoir dupliquer la table la plus importante de ma BDD pour pouvoir utiliser FULLTEXT. Et comme elle aura plus d'1 million d'enregistrements, ce n'est pas génial niveau poids !

La seule alternative a ça, est de trouver, coder un algo PHP ! Maintenant, si l'algo va utiliser plus de ressources que FULLTEXT. Là, je suis ok pour dupliquer une table en FULLTEXT au format MyISAM.

Je vais déjà tenté l'aventure innoDB pour voir... si cela peux simplifier mes requetes. Ensuite, je vais tester FULLTEXT en dupliquant une table au format MyISAM et en utilisant un trigger pour la mettre à jour. Et ensuite, je ferai un test de comparaison entre FULLTEXT et un algo PHP !
Sammuel
le 07/03/2008 à 11:44
Requete ok sous PHP4, et ne fonctionne plus sous PHP5
LupusMic > Au niveau des recherches, tu utilises une technique spéciale avec InnoDB ? un algo de recherche ?

Peut etre pourrais tu m'aiguiller niveau algo de recherche PHP ? smiley. Je vais essayer de trouver quelque chose à ce sujet...

Merci !
Sammuel
le 06/03/2008 à 16:23
Requete ok sous PHP4, et ne fonctionne plus sous PHP5
J'ai oublié de préciser que j'ai toujours utilisé MyISAM comme moteur SQL. Et comme je comptais utiliser FULL TEXT pour faire une recherche au niveau du nom des voitures par exemple, ou au niveau de leurs descriptions, ça ne va pas fonctionner avec InnoDB !

La fonction recherche sur mon site est une fonction principale pour naviguer dessus (50/75% d'utilisation)... un peu comme un moteur de recherche en fait :) Donc, c'est surtout a ce niveau qu'il faut que j'optimise. Je comptais donc utiliser FULL TEXT !

Existe t'il un moyen d'optimiser une recherche via InnoDB ? à l'instar du FULL TEXT avec MyISAM ?
Sammuel
le 06/03/2008 à 15:51
Requete ok sous PHP4, et ne fonctionne plus sous PHP5
Merci pour ton aide LupusMic ;)

C'est vrai que je fais du SQL a la bonne franquette même si j'essaie de limiter le nombre de requêtes et essaie de les simplifier au maximum.

J'avais l'intention d'acheter des livres à ce sujet... mais je peux surement trouver tout ce qu'il me faut sur internet !

Je vais tester ta requete, tes tables, et je te tiens au courant !
Sammuel
le 05/03/2008 à 17:56
Requete ok sous PHP4, et ne fonctionne plus sous PHP5
tss...

J'ai simplement ajouté des () dans FROM et ca fonctionne :
SELECT marque.idmarque,marque.marque,modele.idmodele,modele.modele,COUNT(voiture.idvoiture) AS total
FROM (marque,modele)
LEFT JOIN voiture ON voiture.idmarque = marque.idmarque
WHERE marque.idmarque = modele.idmarque
GROUP BY marque.marque,modele.modele
ORDER BY marque.marque,modele.modele ASC


mdr... je ne vois pas trop l'intéret de faire ca, mais si ca peut leur faire plaisir smiley

En tout cas, l'erreur retournée n'est pas du tout explicite !!
LoadingChargement en cours