SQL MySQL Side Verileri veya PHP gruplama?

1 Cevap php

Ben MySQL aşağıdaki tablolar vardır:

team: id, name, [more stuff]
person: id, name, team, [more stuff]
entry: id, name, team, [more stuff]
registrations: id, event_id, team, status
registration_people: registration_id, person_id
registration_entries: registration_id, entry_id

Ben veritabanını sorgulamak istiyorum, ve her kişi ve girişle ilgili ayrıntıları dönecekti; Kayıt göre gruplandırılmış. Ben SQL kadar olabildiğince yapmak için yılda öğrendim. Ancak, PHP bir sürü iş yapmadan tek bir sorguda bu oluşturmak için iyi bir yol göremiyorum. Bunu yapmanın yolu naif [yalancı] olacaktır:

$registrations = $model->get_registrations($event_id);
foreach ($registrations as $registration)
{
    $registration['people'] = $model->get_people_in_registration($registration['id']);
    $registration['entries'] = $model->get_entries_in_registration($registration['id']);
}
return $registrations;

Bu kod sunucuya birçok yuvarlak gezileri yapar ve kullanılmamalıdır. Ben diğer fikir gibi bir şey yapmak oldu:

$registrations = $model->get_registrations($event_id);
$registration_entries = $model->get_registration_entries($event_id);
$registration_people = $model->get_registration_people($event_id);
foreach ($registrations as $r)
    $reg[$r['id']] = $r;
foreach ($registrations_entries as $e)
    $reg[$e['registration_id']]['entries'][] = $e;
foreach ($registrations_people as $p)
    $reg[$p['registration_id']]['people'][] = $p;
return $reg;

Nerede get_registration_entries/get_registration_people bir katılmak ve tüm kapmak yok registration_entries $event_id olarak kayıtları ile ilişkili olduğunu. Ben bir PHP katılmak yapıyorum gibi Ancak, bu gibi görünüyor; Benim için bunu yapmak için SQL almak mümkün olabilir zaman. Ben sadece paranoyak olmak muyum, ya da ben burada bir şey eksik?

1 Cevap

Bu veritabanına veritabanı veya gidiş-dönüş sayısına okunan veri miktarını azaltır olduğunda "mümkün olduğunca SQL kadar yapmak" kavramı geçerlidir. Yine veri almak gerekiyorsa, veritabanında gruplandırma ne anlamı var? PHP ile yapmak çok daha kolaydır.

Böyle bir şey yapmanız gerekir:

select r.registration_id, p.*
from registration_people rp, registrations r, person p
where /* your filter conditions on the "registration" table */
and rp.registration_id = r.id
and p.id = rp.person_id

(Ben bu hemen hemen ikinci bir yaklaşım olarak aynı sanırım)

Bu şekilde, tüm veritabanından ilgili verileri, ve daha fazla olsun. Şimdi PHP yerel grup sonuçları olabilir. İhtiyacınız kadar sadece veritabanından çok veri almak ve veritabanına gereksiz gidiş gelişlerini yapmayın Bu yaklaşım oldukça etkilidir.