MySQL Select - GROUP_CONCAT ile SAYISININ birleştirin

3 Cevap php

Şu anda özel mesajlaşma için "Gönderilen Mesajlar" alanı görüntülemek için iki tablodan bilgi çeker bir MySQL SELECT deyimi var.

Ben bir iş parçacığı "alıcıları" sayısını saymak için benim sorgu için bir COUNT eklerim nasıl bilmek istiyorum.

İşte benim tablo yapısının temel özü budur, (NOT: İki tablo arasındaki ilişkisel kravat pm-bilgi ve pm_data de "id" in 'mesajı-id' ise):

pm_info:
   id     message_id    receiver_id    is_read     read_date

pm_data:
   id    date_sent    title    sender_id    thread_id    content

İşte benim SELECT deyimi var:

SELECT pm_info.is_read, group_concat(DISTINCT receiver.usrFirst) as receiver_name,
pm_data.date_sent, pm_data.title, pm_data.thread_id, pm_data.id as data_id,
MAX(date_sent) AS thread_max_date_sent
FROM pm_info
INNER JOIN pm_data ON pm_info.message_id = pm_data.id
INNER JOIN tblUsers AS receiver ON pm_info.receiver_id = receiver.usrID
WHERE pm_data.sender_id = '$usrID'
GROUP BY pm_data.thread_id
ORDER BY thread_max_date_sent DESC

Ve bu gibi alıcıları ouputs:

Message 1 - Recipients: John, David, Steve - thread_id = 1234
Message 2 - Recipients: Bill, David, John, Ed, Steve - thread_id = 1345

Yukarıdaki örnekte, "Mesaj 1." üç (3) alıcıları görüntülemek istiyorsunuz, ve "Mesaj 2" beş (5) alıcıları görüntülemek istiyorsunuz yani temelde, ne yapmak istiyorum, alıcıları COUNT seçeneği olması.

Ben 30 kullanıcılara gönderilen bir konu / mesaj, varsa bu şekilde değil, tüm otuz isimleri basılacaktır.

Teşekkürler!

3 Cevap

Mesaj başına 3 adete kadar alıcı seçmek için bir alt sorgu kullanabilirsiniz, ve sonra başka bir sorgu adlarını birleştirmek için:

select 
    (   select group_concat(usrFirst separator ', ') 
        from tblUsers
        where usrId in (
            select usrId
            from tblUsers
            where usrId = pm_info.receiver_id
            limit 3
        )
    ) as receiver_name
 from pm_info
 ....

Sen, bir concatı deyimi içine sayımı ve group_concat hareket olabilir.

... group_concat(DISTINCT receiver.usrFirst) as receiver_name ...

olur

... concat('messages:', count(distinct receiver.usrFirst),'(',group_concat(DISTINCT receiver.usrFirst),')') as receiver_name ...

Sadece COUNT ile GROUP_CONCAT yerine denediniz mi? Bu gibi:

COUNT(DISTINCT receiver.usrFirst) as receiver_count

Veya daha iyisi, (potansiyel olarak size katılır birini ortadan kaldırmak izin verebilecek olan) olarak pm_info.receiver_id kullanın:

COUNT(DISTINCT pm_info.receiver_id) as receiver_count