v2.5.2
Giriş yap

Mysql kayıtları 1 kere saydırmak

mb
350 defa görüntülendi

Merhabalar,
Başvuru aldığım bir form var ve bu katılımcıların bilgilerine ulaşmak istiyorum.
Ama her katılımcıyı bir kere saydırmak istiyorum. Bunun için de bayikodunu baz
alarak yapıyorum. Aşağıdaki sorgu

    SELECT DISTINCT `bayikodu` FROM katilimcilar ORDER BY `bayikodu`

Kayıt oldukları tabloda adı, soyadı, telefon, bayikodu bilgileri yer alıyor.

Sorguyu çalıştırdığım da bana sadece bayikodu bilgisini veriyor. Benim istediğim
bayikodunu baz alarak başvuruları saysın ama ben o kişilerin diğer bilgilerini
de görebiliyim.

Sorguya bayikodu, adi, soyadı gibi tüm verileri ekleyerek sorgulamak istemiyorum.
Çünkü bayikodunu doğru yazsa bile adı ve soyadı gibi bilgileri farklı yazdığında
bu sefer farklı bir kişi olarak algıladığı için tekrardan sayıyor.
Bunun için nasıl bir sorgu yazabilirim.

Cevap yaz
Cevaplar (6)
jct
726 gün önce

Hocam GROUP BY'da işinizi görür diye düşünüyorum;

SELECT * FROM katilimcilar GROUP BY `bayikodu` ORDER BY `bayikodu` ASC
mb
726 gün önce

Sorun Mysql deki ayarlardan kaynaklanıyormuş. ONLY_FULL_GROUP_BY devre dışı bırakmak gerekiyormuş.
https://stackoverflow.com/questions/41887460/select-list-is-not-in-group-by-clause-and-contains-nonaggregated-column-inc

SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));

Sorgulama kodu olarak da aşağıdaki kodu kullandığımda işimi gördü.

SELECT * FROM katilimcilar GROUP BY `bayikodu` ORDER BY `bayikodu` ASC

Teşekkürler.

mb
726 gün önce

Başka bir sunucuya veritabanı yediğini alıp yükledim. O sunucu da aşağıdaki kodu çalıştırdığımda istediğim sonucu verdi.

SELECT * FROM katilimcilar GROUP BY `bayikodu` ORDER BY `bayikodu` ASC

Normal sunucuda çalıştırdığımda aşağıdaki hatayı alıyorum.

Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'veritabani_dosya.katilimcilar.katilimci_id' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
mb
726 gün önce

Dediğiniz gibi yaptığım da yine sadece bayikodu bölümü geliyor. Diğer alanlar gelmiyor.

rephp7
726 gün önce

Bunu bir dener misin?

SELECT DISTINCT * FROM (SELECT bayikodu FROM katilimcilar GROUP BY bayikodu); 
mb
726 gün önce

Dediğiniz gibi yaptım da aşağıdaki hatayı alıyorum.

 which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

Aşağıdaki gibi yaptığım da çalışıyor ama select kısmında bayikodu yanına adı gibi diğer bilgileri eklediğimde hata alıyorum.

 SELECT bayikodu FROM katilimcilar GROUP BY `bayikodu` ORDER BY `bayikodu` ASC