Mysql Gruplama Hakkında
Merhaba,
Aşağıdaki tablomda tek kullanıcıya ait olan resimleri listelemek istiyorum.
Grouplama konusunda biraz zayıfım açıkası. Desteğiniz için şimdiden teşekkür ederim.
// $taskID = * taskFileTaskID'yi eşleştirmekedir.
SELECT*FROM users as u
INNER JOIN taskfile as tf
ON u.personelId = tf.tasksFileUserID
WHERE tf.tasksFileTaskID = '$taskID'
ORDER BY tf.date DESC
Soru hatalı mı? 👎
Eğer sorunun kurallara aykırı olduğunu düşünüyorsanız lütfen bize bildirin!
Cevaplar (6)
as u sonrası için yazıyorum
as u, GROUP CONCAT(taks_filename) as grupimg
sorguna GROUP BY taksfileuserid demelisin
sorgunda kullanıcı bilgisi ve aralarında varsayılan olarak virgül ike ayrılmış şekilde
resim1,resim2 resim5 vs.. diye gelecek
resim adlarını da explode fonksiyonu ile istersen diziye çevirebilirsin
ayrıxa grup concat sınırmı sayıda karaktere izin verir işini görür yine de bunu da araştır
Nasıl bir şey istediğini anlamadım. O zaman benim gibi bir dizi çıktısı sunarsan daha faydalı olabilir.
Maalesef olmadı. Çünkü kullanıcıları gruplamam gerekiyor. Aksi takdirde foreach döngüsünde order by date desc ile listelenerek veritabanına göre listeleme yapmaktadır.
Veri kadar listeleme yerine kullanıcı kadar listelenerek resimler ilgili kullanıcının objesinde gelmeli.
Sanırım istediğin bu şekilde?
[
"userid1"=> ["resim1", "resim2", "resim3", "resim4"],
"userid2"=> ["resim1", "resim2", "resim3", "resim4"],
...,
...
]
While döngüsü içinde yaptığın zaman sanırsam işini görecektir.
$img[$row["tasksFileUserID"]][] = $row["tasksFileName"]
Not: Bir de bu sorguda userid ve resimler dışında başka bir şeye ihtiyacın yoksa
SELECT * FROM
şeklinde kullanmanı pek önermem. Hangi sütunlara ihtiyacın varsa onları belirt.
Daha az veri olması daha verimli olmasını sağlar.
tasksFileUserID sütununda olan kullanıcının resimlerini tek bir hücre içinde toplamayı düşünüyorum.
Şöyle düşün; X adındaki kullanıcının resimlerini,
X -> resim1,
X -> resim2,
X -> resim3 şekilinde listelenmesi yerine;
X -> resim1, resim2, resim3 şeklinde olmasını düşünüyorum.
Hangi kullanıcıyı aradığını belirtmezsen nasıl bulmasını bekleyebilirsin?
"SELECT * FROM users as u
INNER JOIN taskfile as tf
ON u.personelId = tf.tasksFileUserID
WHERE tf.tasksFileTaskID = $taskID AND tf.tasksFileUserID = $userID
ORDER BY tf.date DESC"