2010-06-07 7 views
3

Un peu nouveau pour les requêtes SQL et j'ai besoin d'un peu d'aide pour ma jointure.Aide à la création d'une requête SQL

Je suis fourni avec gid

Pour chacun d'eux, je dois saisir nom de la table wp_ngg_gallery

puis rejoindre dans le tableau wp_ngg_pictures et grab champ nom de fichier limite ordre DESC par champ imageda te

alt text http://cl.ly/80c22b7010ab8f021558/content

alt text http://cl.ly/bfdf41b3706d25e0ee10/content

Toute personne en mesure d'aider? Dites-moi si/comment cela fonctionne.

Répondre

0

Je vais deviner:

select wp_ngg_gallery.name, wp_ngg_pictures.filename 
from wp_ngg_gallery, wp_ngg_pictures 
where wp_ngg_pictures.galleryid = wp_ngg_gallery.gid 
order by wp_ngg_pictures.imagedate DESC 
limit 0,1 

S'il y a un GID spécifique que vous voulez, vous pouvez faire:

select wp_ngg_gallery.name, wp_ngg_pictures.filename 
from wp_ngg_gallery, wp_ngg_pictures 
where wp_ngg_pictures.galleryid = wp_ngg_gallery.gid 
and wp_ngg_gallery.gid = $gid 
order by wp_ngg_pictures.imagedate DESC 
limit 0,1 

(Le gid $ est valide si vous êtes requête est string en PHP, vous n'avez pas dit, cependant, si c'est ce que vous utilisez)

On ne sait pas si wp_ngg_pictures.galleryid est une clé étrangère à wp_ngg_gallery.gid mais c'est le choix le plus probable étant donné les informations que vous avez fournies . Si ce n'est pas le cas (si vous pouvez avoir des galeries sans images), vous pouvez modifier la requête de l'autre type (en utilisant la jointure externe) en y ajoutant and wp_ngg_gallery.gid = $gid.

+0

Juste ajouté ET wpp_ngg_gallery.gid = [numéro fourni] et cela a fonctionné! – wesbos

3

Si vous videz ces deux tables (hors phpMyAdmin) dans un format SQL, je vais créer des bases de données locales et les exécuter moi-même (en supposant que cela ne marche pas).

SELECT 
    `wp_ngg_gallery`.`name`, 
    `wp_ngg_pictures`.`filename` 
FROM 
    `wp_ngg_gallery` 
    LEFT JOIN 
     `wp_ngg_pictures` 
    ON 
     `wp_ngg_gallery`.`gid` = `wp_ngg_pictures`.`galleryid` 
ORDER BY 
    `wp_ngg_pictures`.`imagedate` DESC 
LIMIT 
    0,1; 

Ceci suppose que vous avez besoin d'un JOIN. Il pourrait probablement être fait avec une déclaration correcte GROUP BY.

+1

Ce qui est bon, mais je dois préciser le GID. Par exemple - Où GID = 3 – wesbos

+2

+1 pour l'utilisation d'une jointure externe - sans supposer qu'une galerie ait des images. –

+0

@Wes: Ensuite, ajoutez un 'WHERE wp_ngg_gallery.gid = [GID]' à la requête. @ Bill: Merci. –

0

Si vous le voulez pour plusieurs GID (choisir les autres options pour un seul):

SELECT gid,name, a.filename 
FROM wp_ngg_gallery 
JOIN wp_ngg_pictures a 
ON a.galleryid = gid 
LEFT JOIN wp_ngg_pictures b 
ON a.galleryid = gid 
AND b.imagedate > a.imagedate 
WHERE b.galleryid IS NULL 
AND gid IN (1,2,3) 
+0

Je ne suis pas sûr de ce que vous faites là, mais il ne trie pas par 'imagedate' et vous utilisez une méthode statique' IN() '. Supposons qu'il veut jumeler tous les enregistrements. –

+0

Vous avez besoin de 'WHERE b.galleryid IS NULL', pas de' a.gallaryid IS NULL', mais c'est la solution que j'utilise pour les dizaines de questions auxquelles j'ai répondu avec la balise 'greatest-n-per-group'. Cependant, l'OP n'a pas dit qu'ils avaient besoin de chercher des gids multiples, donc leur question peut être répondue avec une requête plus simple. –

+0

@Bill: oups, fixes :) (et c'est la raison pour laquelle j'ai explicitement dit que pour utiliser si pour plusieurs) @Josh K: ye incroyant, aller de l'avant et tester, et qu'il y ait beaucoup de joie dans les nouvelles connaissances. – Wrikken