2012-06-19 1 views
2

Hey j'ai quelques problèmes avec une instruction SQL. C'est le schéma de base de données :(http://docs.elgg.org/wiki/DatabaseSchema), seules les "entités" et la table "relation" sont importantes! Ce que j'essaie de faire, c'est de sélectionner tous les guides où le type de l'objet est "groupe" mais cet objet n'est pas un enfant d'un autre groupe. Cela signifie qu'il n'y a aucun enregistrement dans la table de relation avec le guid dans la colonne guid_two. Ma première idée était la suivante:Lutte avec instruction SQL (n'existe pas)

SELECT * FROM elgg_entities e 
JOIN elgg_entity_relationships r ON e.guid = r.guid_one 
WHERE e.type='group' AND NOT EXISTS (
    SELECT * 
    FROM elgg_entity_relationships s 
    WHERE e.guid = s.guid_two 
      AND s.relationship='subgroup') 

Mais cela ne fonctionnera pas. Il y a aussi d'autres relations dans la table comme membre etc. J'espère que quelqu'un peut m'aider, parce que je suis vraiment frustré en ce moment.

Edit: Cette requête SQL fonctionne dans myPHP, en Elgg j'ai essayé de le convertir en "Elgg-ich":

$options = array(
    'type' => 'group', 
    'joins' => array("JOIN elgg_entity_relationships r ON e.guid = r.guid_one"), 
    'wheres' => array("e.type='group' AND not exists (SELECT e.guid 
    FROM elgg_entity_relationships s 
    where e.guid = s.guid_two 
    AND s.relationship = 'subgroup' 
)"), 
'limit' => $limit, 
'full_view' => FALSE, 
); 
$content = elgg_list_entities($options); 

=> Solution a été la sensibilité à la casse et où au lieu de wheres en ligne 6.

+1

Votre requête ressemble bien, peut-être vous pouvez mettre en place un exemple à [SQL Fiddle] (http: // sqlfiddle. com /) pour rendre le problème tangible – Andomar

+0

Vous avez raison. J'ai essayé la requête en php et j'ai reçu le bon guidd. On dirait que le problème est dans elgg. Merci! – Manu

+0

Veuillez définir 'wont work'. Avez-vous un message d'erreur? Si oui, montrez-les. Avez-vous des résultats inattendus? Si oui, s'il vous plaît montrer les données d'entrée, les résultats et pourquoi ils ne sont pas ce que vous attendiez. – MatBailie

Répondre

0

Comme indiqué dans la question éditée;

solution a été la sensibilité de cas et où au lieu de wheres en ligne 6.