2011-07-28 6 views
1

Ceci est la requête que j'ai en ce moment:résultats de recherche

SELECT 
    `groups`.`id`, 
    `groups`.`name`, 
    `groups`.`description`, 
    `groups`.`members`, 
    `groups`.`image`, 
FROM 
    `groups` 
WHERE 
    `groups`.`name` LIKE '%a%' 
    OR 
    `groups`.`description` LIKE '%b%' 

Tous les travaux comme prévu, mais je dois une chose supplémentaire pour sélectionner. Le problème est que c'est stocké dans une autre table et je ne suis pas très bon avec les jointures. Voici 2ème structure de la table:

group_members

  • group_id,
  • user_id,
  • status;

J'ai besoin de sélectionner le statut d'utilisateur spécifié pour le groupe! C'est possible? Comment?

Merci dans le conseil!

Edit:

J'ai besoin pour afficher tous les groupes et le statut de l'utilisateur actuel dans chacun de ces groupes.

Edit # 2:

Disons que user_id est réglé sur 33. Il tape aa comme nom de groupe et dans les résultats il voit tous les groupes qui ont aa dans son nom. En outre, dans les résultats sont son statut dans chaque groupe.

ID Name Description Status 

2  aa2  foobar   3 
2  aa1  foobar   1 
4  aa3  foobar  
6  aa3  foobar  
5  aa3  foobar   2 

Edit # 3:

Voici presque ce que je dois ...

SELECT `groups`.`id`, `groups`.`name`, `groups`.`description`, `groups`.`members`, `groups`.`image`, `group_members`.`status` 
FROM `groups` 
LEFT JOIN `group_members` 
    ON (`group_members`.`group_id` = `groups`.`id`) 
WHERE `group_members`.`user_id` = '33' 
    AND `groups`.`name` LIKE '%%' 
    OR `groups`.`description` LIKE '%%' 

Seul problème, je ne sélectionne pas les groupes où je ne suis pas membre. Intéressant pourquoi ... J'ai utilisé 'left outer' rejoindre.

+2

Oui c'est possible, mais je ne comprends pas ce que vous devez sélectionner assez bien pour l'écrire ... –

+0

On dirait que vous mélangez les choses. Chaque groupe n'a qu'une description et une image, mais de nombreux membres. Qu'est-ce que vous voulez afficher? * Tous * les membres, avec toutes les données par groupe répétées sur chaque ligne? –

+0

Avoir 'group_members'.'user_id' =' 33 'condition dans la clause where va filtrer les résultats qui n'ont pas cet user_id. Si vous voulez tous les groupes où user_id = 33 est membre ou non membre, supprimez cette condition de la clause where. – legendofawesomeness

Répondre

0

si je vous comprends, il est très facile d'ajouter un join, comme:

SELECT 
    `groups`.`id`, 
    `groups`.`name`, 
    `groups`.`description`, 
    `groups`.`members`, 
    `groups`.`image`, 
FROM 
    `groups` 
LEFT JOIN group_members 
ON `groups`.`id` = group_members.group_id 
WHERE 
    `groups`.`name` LIKE '%a%' 
    OR 
    `groups`.`description` LIKE '%b%' 
    AND group_members.status = xxx 
0

vous devez ajouter

INNER JOIN group_members 
ON group_members.group_id = groups.id 

après

FROM 
    `groups` 

puis ajoutez

group_members.status 

à votre sélection

0

Si vous souhaitez que les groupes indépendamment du fait qu'ils ont une group_member ou non utiliser alors LEFT OUTER JOIN comme ci-dessous. Si vous voulez seulement les groupes qui ont un ou plusieurs membres de groupe, changez LEFT OUTER JOIN à INNER JOIN.

SELECT 
     `groups`.`id`, 
     `groups`.`name`, 
     `groups`.`description`, 
     `groups`.`members`, 
     `groups`.`image`, 
     group_members.status 
    FROM 
     `groups` 
    LEFT OUTER JOIN group_members 
    ON group_members.group_id = groups.group_id 
    WHERE 
     `groups`.`name` LIKE '%a%' 
     OR 
     `groups`.`description` LIKE '%b%' 
    AND status = 'something' 
+0

Pouvez-vous regarder la question - modifier # 3? – daGrevis

Questions connexes