Requête SQL tordue version 3 ^^

WRInaute impliqué
Salut tout le monde,

Voilà toujours pour mon site aux requêtes SQL complexes, en voici une autre qui me turlupine u_u (merci en passant aux résolvateurs (on dit comme ca ? ^^) des précédentes requêtes ^^).

Voilà j'ai des membres qui possèdent chacun des objets dans une base sous la forme :

TABLE OBJETS
- ID objet
- ID membre
- Objet en lui même
- Modèle ? (0 ou 1)

Dans cette même table, j'ai les objets servant de modèle (model="1") qui sont copiés dans la table lorsqu'un membre achète l'objet.

Ce que je voudrais faire : récupérer les objets non possédés par un membre selon son ID, en me basant sur le facteur model = "1" dans la table objet. Je voudrais faire ceci à l'échelle de tous les membre.

Par contre j'ai aucune idée de la manière dont je pourrais m'y prendre :mrgreen:. Merci d'avance pour votre aide :oops:
 
Nouveau WRInaute
Salut,

Si ton SGBD supporte les requetes imbriquées :
Code:
SELECT id_objet FROM table_objet WHERE modele=1 AND id_objet NOT IN(SELECT id_objet FROM table_objet WHERE id_membre= $id_du_membre)
où $id_membre est une variable contenant l'id de ton membre...

Si ton SGBD ne supporte pas les requêtes imbriquées (Versions les plus courantes de Mysql) fait deux requetes :

1. recupere les id des objets que le membre possède :
Code:
SELECT id_objet FROM table_objet WHERE id_membre=$id_du_membre
AND modele=0

2. Concatene les resultat dans une chaine "$liste_des_id" séparé par des virgules de manière a obtenir une chaine du type : "3, 15, 7"

3. Fais la requete excluant les objet que le memebre possède :
Code:
SELECT id_objet FROM table_objet WHERE modele=1 AND id_objet NOT IN ($liste_des_id)
 
WRInaute impliqué
Merci bien, je pense que c'est comme ca que je dois procéder, mais je dois faire ca pour à peu près 20 000 membres, c'est pour ca que j'ai besoin d'une requête unique :) Donc là je vais voir si la première requête marche, et sinon je verrais si je peux installer une version de mysql plus récente sur mon serveur :)

Merci beaucoup
 
WRInaute impliqué
Etant donné que je n'ai pas les sous requête d'activées sur mon serveur, j'ai trouvé un autre système, avec CONCAT.

mysql_query('UPDATE `membres`, `setNewAvEntrpTransition` SET `membres`.`visibleEntreprises0` = CONCAT(`setNewAvEntrpTransition`.`id`, ",") WHERE `setNewAvEntrpTransition`.`vipLevel` = "0"');

Malheureusement, il ne prend que le premier `setNewAvEntrpTransition`.`id` auquel il rajoute une virgule, comment faire pour qu'il fasse une sorte "d'implode" entre tous les ids ?

Merci d'avance
 

➡️ Offre MyRankingMetrics ⬅️

pré-audit SEO gratuit avec RM Tech (+ avis d'expert)
coaching offert aux clients (avec Olivier Duffez ou Fabien Faceries)

Voir les détails ici

coaching SEO
Discussions similaires
Haut