Requete sql faire une sous requete
momohuri
Messages postés
235
Date d'inscription
Statut
Membre
Dernière intervention
-
momohuri Messages postés 235 Date d'inscription Statut Membre Dernière intervention -
momohuri Messages postés 235 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
j ai une requete du genre :
select .... FROM matable WHERE (visibilite =1 AND idcreateur IN (select * from amis where id =1 ))
grosso modo le truc c est qui faut que idcreateur soit dans une des colone de la table amis . La table ressemble a :
id idamis1 idamis2....
Merci
j ai une requete du genre :
select .... FROM matable WHERE (visibilite =1 AND idcreateur IN (select * from amis where id =1 ))
grosso modo le truc c est qui faut que idcreateur soit dans une des colone de la table amis . La table ressemble a :
id idamis1 idamis2....
Merci
A voir également:
- Requete sql faire une sous requete
- Erreur de requete facebook - Forum Facebook
- Quelle requête écrire pour demander au moteur de recherche de présenter de préférence les pages web traitant de tennis mais pas de tennis de table ✓ - Forum Java
- Logiciel sql - Télécharger - Bases de données
- Difficulté avec requête SQLite ✓ - Forum Android
- Requête bloquée par le pare-feu applicatif claranet webfence ✓ - Forum Google Chrome
2 réponses
Bonjour,
Ce genre de syntaxe en SQL n'est pas possible.
Une sous requête doit renvoyer une seule colonne.
Il faudrait travailler ainsi
select
...
from matable, amis
where
amis.id = 1
matable.visibilite=1
and
(
(matable.idcreateur=amis.idamis1)
or
(matable.idcreateur=amis.idamis2)
...
)
Mais je pense que c'est plus du à une erreur de conception de la base
la table amis devrait être du genre
id1, id2
ou id1 est l'amis de id2
du genre
1,2
1,3
1,4
2,3
2,4
....
Ce genre de syntaxe en SQL n'est pas possible.
Une sous requête doit renvoyer une seule colonne.
Il faudrait travailler ainsi
select
...
from matable, amis
where
amis.id = 1
matable.visibilite=1
and
(
(matable.idcreateur=amis.idamis1)
or
(matable.idcreateur=amis.idamis2)
...
)
Mais je pense que c'est plus du à une erreur de conception de la base
la table amis devrait être du genre
id1, id2
ou id1 est l'amis de id2
du genre
1,2
1,3
1,4
2,3
2,4
....
pour la table je pourrait faire ce que tu dit aussi mais dans ce cas la ca veut dire qu on arrive a nbrdegens *nbrdamis avec 2 colone pour chaque pour le nbr de ligne.
Donc pour 1000 personne qui sont amis entre elle on arrive a 200 000 champ
Or avec ma methode on est a nbrdegens avec x colones(mis a 100 pour le moment)
donc 100 000 pour ma methode
et plus il y a des gens plus ta méthode fait une exponentielle.
c est vraiment mieux de faire plein de ligne plutot que plein de colone?
Donc pour 1000 personne qui sont amis entre elle on arrive a 200 000 champ
Or avec ma methode on est a nbrdegens avec x colones(mis a 100 pour le moment)
donc 100 000 pour ma methode
et plus il y a des gens plus ta méthode fait une exponentielle.
c est vraiment mieux de faire plein de ligne plutot que plein de colone?
En SQL on ne multiplie pas les colonnes, c'est une règle d'or
Le nombre de ligne importe, mais si les indexes sont bien placés...
Et puis avec ton système, on est fatalement limité à un certain nombre d'amis, pas ans le mien.
De plus il y aura un peu moins de lignes :
si 1 est amis avec 2, inutile de préciser que 2 est amis avec 1, on le sait
Après tu fais comme tu veux.
Le nombre de ligne importe, mais si les indexes sont bien placés...
Et puis avec ton système, on est fatalement limité à un certain nombre d'amis, pas ans le mien.
De plus il y aura un peu moins de lignes :
si 1 est amis avec 2, inutile de préciser que 2 est amis avec 1, on le sait
Après tu fais comme tu veux.
Tu ne sais pas gérer les indexes ???
Alors avant toute chose, avant de te lancer dans la programmation SQL,
il va te falloir ouvrir un livre sur le sujet, ou trouver un bon cours, désolé d'être aussi direct.
Les indexes sont les nerfs de la base de données, sans index, toute tes requêtes vont patiner. Un index permet d'accéder rapidement (données triées) à un enregistrement, sans indexe, le système est obligé de parcourir presque tous les enregistrements, imagine, je bosse avec tables de plus de huit millions d'enregistrements sous Oracle alors...
Pour créer un indexe la commande SQL est
create index nom_index on nom_table (nom_champ_concerne,.....)
Mais il y des indexes primaires, secondaires (clefs)
Avant de créer des indexes, il faut bien comprendre quel champ servira principalement dans les requêtes, bref faire une analyse au préalable, en fait c'est un métier 8-)
Alors avant toute chose, avant de te lancer dans la programmation SQL,
il va te falloir ouvrir un livre sur le sujet, ou trouver un bon cours, désolé d'être aussi direct.
Les indexes sont les nerfs de la base de données, sans index, toute tes requêtes vont patiner. Un index permet d'accéder rapidement (données triées) à un enregistrement, sans indexe, le système est obligé de parcourir presque tous les enregistrements, imagine, je bosse avec tables de plus de huit millions d'enregistrements sous Oracle alors...
Pour créer un indexe la commande SQL est
create index nom_index on nom_table (nom_champ_concerne,.....)
Mais il y des indexes primaires, secondaires (clefs)
Avant de créer des indexes, il faut bien comprendre quel champ servira principalement dans les requêtes, bref faire une analyse au préalable, en fait c'est un métier 8-)