10
votes

En utilisant un champ personnalisé dans la clause de la requête SQL

Ma question est très similaire à celle-ci Comment faire référence à une coutume champ dans SQL J'ai la requête suivante:

SELECT * , (SELECT COUNT( id ) 
FROM cms_store_items
WHERE speaker = cms_store_items_speakers.id
) AS count
FROM cms_store_items_speakers
LIMIT 0 , 30


0 commentaires

3 Réponses :


21
votes

Eh bien, pour le faire strictement comme vous le faites:

select
    s.id,
    s.col1,
    count(i.speaker) as count
from
    cms_store_items_speakers s
    left join cms_store_items i on
        s.id = i.speaker
group by
    s.id,
    s.col1
having
    count(i.speaker) > 0
limit 0, 30


3 commentaires

La première option fonctionne bien, semble que mon précédent (maintenant le commentaire supprimé était dû à la mise en cache), merci pour la solution.


changer le nombre (*) pour compter (i.Speaker), et le comptage (*) à compter (i.Speaker), juste à l'épreuve du code; Si la nécessité de compter zéro Correspondances se pose, changez simplement la jointure intérieure à gauche rejoindre, je vais uppouver votre réponse :)


@Michael: bonne prise! Merci!



0
votes

Je ne suis pas sûr à 100% sur MySQL, mais quelque chose comme ça devrait être très possible:

(SELECT 
     *
FROM
(
   SELECT cms_store_items_speakers.*,
          (SELECT COUNT(id) FROM cms_store_items
           WHERE speaker = cms_store_items_speakers.id) AS 'count'
   FROM cms_store_items_speakers)
   LIMIT 0, 30
)
WHERE count > 0;


0 commentaires

16
votes

Vous pouvez utiliser avoir la clause à la place: xxx

avoir est comme mais il est capable travailler sur des colonnes calculées. AVERTISTATEUR: AVEC Fonctionnement par les résultats de l'élagage après Le reste de la requête a été exécuté - ce n'est pas un substitut pour le où < / CODE> CLAUSE.


0 commentaires