Bu mysql kod küçük açıklama

3 Cevap php

Ben daha önce başka bir Q birinden bu cevabı aldım, ama ben tam olarak sorunu anlamak, böylece bu konuya bir açıklama almak istiyorum.

I have a table, with a column which contains a value of either "private" or "company". Thing is, I want to check how many "private" and "company" values are in my records, so that I can display them with the search results later on. So if there are 4 company ads, and 1 private ad, this is the results:

  Company = 4
  Private = 1
  All ads = 5

Ve burada ben bunu nasıl birinden aldım kod, diğer bir deyişle, bu ne istiyorsunuz açıklanmıştır olduğunu:

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

Teşekkürler

3 Cevap

Type alanını seçin ve değeri null ise, varsayılan değer olarak All Ads kullanın.

Alana göre table, grup onları onları seçin.

Bildiğim kadarıyla söyleyebilirim, bu her biri, her 'Türü' angajmanlarının sayısını, ve null değeri olan tüm kayıtlar sadece 'Tüm Reklamlar' saymak altında devam edecek.


Eğer IFNULL() fonksiyonuna bakarsanız, sadece BTW, bunu anlamak oldukça kolaydır. Açıkça IF NULL devletler, bu yüzden bir şey boş olup olmadığını kontrol ediyor. Sonra bunu bir alan adı ve bir statik değer geçmek. Tür bu alan değeri false ise o denetliyor mantıklı. Ve orada tek şey değerdir, bu yüzden alan değeri boş ise o, statik değer kullanacağı sonucuna varabiliriz.

Ben anlamıyorum kısmı genellikle kullanılmaz ROLLUP clause olduğunu varsayalım.

Manuel de bunu açıklar, ancak temel fikir her bir grup toplanmış olmasıdır, ve sonra tüm gruplardan satırları toplayan sonunda bir ekstra grup olsun, ve Field NULL olarak ayarlanır nerede.

IFNULL ifadesi yerine okunabilir bir dizeye NULL değiştirir. Sen aynı etkiyi elde etmek için COALESCE yerine IFNULL kullanabiliyordu.

Table "masanın" bütün reklamlar seçer, bu gruplar onları alana göre, bu tüm reklamlar "kamusal" bir sayıyla ilişkilendirilmiş "kamusal" bir grubun içine yerleştirilir olduğu anlamına gelir. 10 kamu reklamlar var ise hepsi değeri 10 ile "kamu ilanlarında" halinde gruplandırılmış ediyoruz.

Bu mantıklı mı?