2010-02-07 3 views
1

J'ai obtenu cette réponse de quelqu'un sur un autre Q auparavant, mais j'aimerais avoir une explication de ceci, afin que je comprenne parfaitement le problème.Petite explication de ce code mysql

J'ai une table, avec une colonne qui contient une valeur de soit « privée » ou « société ». Cela étant, je veux vérifier le nombre de valeurs "privées" et "entreprises" dans mes enregistrements, de sorte que je puisse les afficher avec les résultats de la recherche plus tard. Donc, s'il y a 4 annonces de l'entreprise, et 1 annonce privée, ce sont les résultats:

Company = 4 
    Private = 1 
    All ads = 5 

Et voici le code que je suis arrivé de quelqu'un sur la façon de le faire, autrement dit, c'est ce que je comme expliqué:

SELECT 
    IFNULL(field , 'All ads') AS 'Type', 
    COUNT(*) 
FROM 
    `table` 
GROUP BY 
    field 
WITH ROLLUP 

Merci

+0

Cela me semble assez simple? Quelle partie ne comprenez-vous pas? –

+0

l'IFNULL (champ, 'toutes les annonces') AS 'type', compte (*) partie –

+1

Le 'IFNULL (field, 'all ads') AS 'Type'' est juste mineur et ne change pas le résultat. Remplacez-le par 'field' pour obtenir presque exactement le même résultat mais une requête plus simple et plus facile à comprendre. –

Répondre

0

Sélectionnez le champ Type, et si la valeur est nulle, utilisez All Ads comme la valeur par défaut.

les sélectionner dans la table et les regrouper par domaine. Autant que je sache, cela comptera chacun le nombre d'entrées de chaque 'Type', et toutes les entrées qui ont une valeur nulle seront simplement placées sous le nombre 'Toutes les annonces'.


Juste BTW, si vous regardez la fonction IFNULL(), il est assez facile à comprendre. Il indique clairement IF NULL, donc il vérifie si quelque chose est nul. Ensuite, vous lui passez un nom de champ et une valeur statique. Un peu de sens qu'il vérifie si cette valeur de champ est fausse. Et la seule autre chose est la valeur, donc nous pouvons arriver à la conclusion qu'il utilisera la valeur statique, si la valeur du champ est nulle.

0

Sélectionne toutes les annonces de la table « table », il les groupes par domaine, cela signifie que toutes les annonces qui sont « public » sont placés dans un groupe « public » avec un numéro associé. Donc, si vous avez 10 annonces publiques ils sont tous regroupés en « annonces publiques » avec la valeur 10.

Est-ce sens?

4

Je suppose que la partie que vous ne comprenez pas le ROLLUP clause, qui n'est pas souvent utilisé.

Le manuel le décrit bien, mais l'idée de base est que chaque groupe est agrégé, puis vous obtenez un groupe supplémentaire à la fin qui agrège les lignes de tous les groupes et où Field est défini sur NULL.

L'expression IFNULL change la valeur NULL à une chaîne lisible au lieu. Vous pouvez utiliser COALESCE au lieu de IFNULL pour obtenir le même effet.

+1

Non 'Type' mais' field' est défini sur NULL. Sinon, corriger ;-) – VolkerK

+0

Merci pour la correction. –