MySQL : pb de ram perdue + requetes "sub select" - SQL/NoSQL - Programmation
MarshPosté le 31-01-2004 à 16:52:02
Bon, je me remets au SQL depuis qques jours, avec mySQL 3.23.49 installé sous WinXP via phpMyAdmin 2.5.5p1. Premier soucis, et de taille, j'ai des fuites de RAM à cause de winMySqlAdmin : dans le gestionnaire de tâches de WinXP (performances/utlisation du fichier d'échange), ça monte, ça monte... De 180Mo, je suis déjà à 390Mo, et hier, ça a fait planté mon PC à 1.15Go !! Il faut que je ferme winMySqlAdmin pour redescendre à 200Mo. Une idée du pb ? Je suis 'utilisateur avec pouvoir' sur mon PC.
D'autre part, j'ai repris mes TP PostgreSQL pour m'aider à faire quelques requètes, et j'ai du mal à croire que mySQL ne supporte pas les requètes imbriquées.
J'ai 2 tables, phpwebgallery_images (qui contient le champ 'id')et phpwebgallery_image_category (avec le champ 'image_id'). Eh oui, j'utilisePhpWebGallery ! Comme ma base n'a pas été très bien remplie, j'ai un nbre d'enregistrements dans les 2 tables précédantes. En gros, le fonctionnement de base de phpwebgallery tourne autour de 3 tables : _"category" qui définie les catégories/thèmes des photos, en reprenant les répertoires ; "_images" qui inscrit le nom de fichier et les commentaires de chq photo ; et "_image_category" qui met en relation les photos dans les category (2 champs : "image_id" et "category_id" ). Donc logiquement, il y a autant d'enregirstrements dans la table "_image_category" que dans la table "_images" puisque chq photo est dans une seule catégorie (enfin, c'est possible de la mettre dans plusieurs catégories, mais cela n'est pas mon cas).
Donc, je voudrais donc sélectionner les images qui ne sont pas dans des categories (ma table "image_category" a 1498 entrées contre 1622 dans "images", donc je cherche les 125 erreurs). J'ai essayé les différentes requètes suivantes mais aucune ne fonctionne (erreur #1064):
Code :
SELECT `id` FROM `phpwebgallery_images` WHERE `storage_category_id` <> ALL (SELECT `category_id` FROM `phpwebgallery_image_category`);
SELECT `id` FROM `phpwebgallery_images` WHERE `id` NOT IN (SELECT `image_id` FROM `phpwebgallery_image_category`);
(SELECT `id` FROM `phpwebgallery_images`) EXCEPT (SELECT `image_id` FROM ` phpwebgallery_image_category`);
(SELECT pi.id FROM phpwebgallery_images pi) EXCEPT (SELECT pic.image_id FROM phpwebgallery_image_category pic);
(SELECT pi.id FROM phpwebgallery_images pi) OUTER JOIN (SELECT pic.image_id FROM phpwebgallery_image_category pic);
SELECT pi.id FROM phpwebgallery_images pi
WHERE NOT EXISTS (SELECT *
FROM phpwebgallery_image_category pic
WHERE pic.image_id = pi.id);
SELECT pi.id FROM phpwebgallery_images pi
WHERE (SELECT *
FROM phpwebgallery_image_category pic
WHERE pic.image_id <> pi.id);
SELECT pi.id
FROM phpwebgallery_images pi
IN (
SELECT *
FROM phpwebgallery_image_category pic
WHERE pic.image_id = pi.id );
SELECT `id`
FROM ´phpwebgallery_images´, ´phpwebgallery_image_category´
WHERE ´image_id´ <> ´id´;
Dans la doc mySQL ( http://www.mysql.com/doc/en/Comparison_Operators.html ), certains disent que les sub select ne sont pas possible. Vous confirmez ? En fait, je suis sur le coup bien surpris des limites de mySQL... (ptet qu'il faut que je passe à la v4 ?) Je pensais postgreSQL / MySQL, c'est kif kif, mais là, non puisque mes requètes précédantes (il y a peut etre qques erreurs d'ailleurs) fonctionnaient bien sous postgreSQL...
Marsh Posté le 31-01-2004 à 16:52:02
Bon, je me remets au SQL depuis qques jours, avec mySQL 3.23.49 installé sous WinXP via phpMyAdmin 2.5.5p1.
Premier soucis, et de taille, j'ai des fuites de RAM à cause de winMySqlAdmin : dans le gestionnaire de tâches de WinXP (performances/utlisation du fichier d'échange), ça monte, ça monte... De 180Mo, je suis déjà à 390Mo, et hier, ça a fait planté mon PC à 1.15Go !!
Il faut que je ferme winMySqlAdmin pour redescendre à 200Mo.
Une idée du pb ? Je suis 'utilisateur avec pouvoir' sur mon PC.
D'autre part, j'ai repris mes TP PostgreSQL pour m'aider à faire quelques requètes, et j'ai du mal à croire que mySQL ne supporte pas les requètes imbriquées.
J'ai 2 tables, phpwebgallery_images (qui contient le champ 'id')et phpwebgallery_image_category (avec le champ 'image_id'). Eh oui, j'utilisePhpWebGallery !
Comme ma base n'a pas été très bien remplie, j'ai un nbre d'enregistrements dans les 2 tables précédantes. En gros, le fonctionnement de base de phpwebgallery tourne autour de 3 tables : _"category" qui définie les catégories/thèmes des photos, en reprenant les répertoires ; "_images" qui inscrit le nom de fichier et les commentaires de chq photo ; et "_image_category" qui met en relation les photos dans les category (2 champs : "image_id" et "category_id" ).
Donc logiquement, il y a autant d'enregirstrements dans la table "_image_category" que dans la table "_images" puisque chq photo est dans une seule catégorie (enfin, c'est possible de la mettre dans plusieurs catégories, mais cela n'est pas mon cas).
Donc, je voudrais donc sélectionner les images qui ne sont pas dans des categories (ma table "image_category" a 1498 entrées contre 1622 dans "images", donc je cherche les 125 erreurs).
J'ai essayé les différentes requètes suivantes mais aucune ne fonctionne (erreur #1064):
Dans la doc mySQL ( http://www.mysql.com/doc/en/Comparison_Operators.html ), certains disent que les sub select ne sont pas possible. Vous confirmez ?
En fait, je suis sur le coup bien surpris des limites de mySQL... (ptet qu'il faut que je passe à la v4 ?) Je pensais postgreSQL / MySQL, c'est kif kif, mais là, non puisque mes requètes précédantes (il y a peut etre qques erreurs d'ailleurs) fonctionnaient bien sous postgreSQL...