PHP / DB desen soru

2 Cevap php

Ben "kurtuluş kodları" bir fikir ile çalışan bir uygulama var (şema: ID, NAME, USES, CODE). Ve Örnek "32, Stack Overflow, 75, 75%67-15hyh" olur

Yani bu kod SO topluluk verilir, diyelim, ve 75 itfalara vardır. Bazı nakliye bilgi ve kodu girerek kurtarmak. Girildiğinde, bu onay oluşturulmaktadır:

if (code exists){
    if (count_entries_where_code=$code < $uses_set_at_creation){
        //enter information into DB for processing
    {
    //echo "sorry, not a real code"
}

Yani toplam kullanımların sayısı kodlanmış, ancak itfalarının mevcut # bir SQL sorgusu ile oluşturulur (count_results from entry_data WHERE code=$code). Bu kısmı iyi çalışıyor, ama burada soru şudur:

Ben kodları yönetmek view sayfasında, ben temel kurulum var (sözde PHP, with the real code separated into an MVC setup):

$results = "SELECT * FROM codes";
foreach ($result as $code){
    echo $code->code;
    echo $code->name;
    //etc. It's actually all in a nice HTML table.
}

Yani bir sütun liste "kod üzerinde kalan kullanımlar içinde" olmasını istiyorum. Böyle bir şey DB saklanır ve bu şekilde çizilmiş olmalı? Bu foreach döngü ile oluşturmak daha kolay olurdu, ama genellikle böyle "oluşturulan" istatistik depolamak için tercih etmiyorum. Foreach döngüsü ile oluşturulan tablonun doğru satır üzerine bu sonuçları elde etmek için akıllı bir yolu var mı?

(Ben bu yüzden sadece bu sorunu uyabilecek bir desen bir açıklama, ve belki de böyle bir şey için ortak bir tasarım bir tartışma, bir çalışma / büyük bir sözdizimi örneği gerekmez kodu ile iyiyim. Birazdan önlemek için muyum kullanımlarından # gibi saklamayı üretmek-mümkün veri bırakılır? vb)

2 Cevap

Ben doğru kullanımları # gibi üretmek-mümkün verileri sola depolamak önlemek için muyum?

Yes, you are correct to not store computed values.
Computation logic can change, and working with a stored computed value to reverse engineer it can be a nightmare - if it is possible at all in some cases.

Eğer iki sorgu birleştirmek istediğiniz gibi geliyor:

SELECT c.id, 
       c.name, 
       c.uses, 
       c.code,
       x.num_used
  FROM CODES c
  JOIN (SELECT ed.code,
               COUNT(*) 'num_used'
          FROM ENTRY_DATA ed
      GROUP BY ed.code) x ON x.code = c.code

Eğer sayfa için kodları entry_data tablodan kullanılan kodların numarasını almak için bir alt sorgu eklemek almak için sorguyu çalıştırdığınızda.

select codes.id, codes.name, codes.uses, codes.code (select count(code) from entry_data where entry_data.code=codes.code ) as used_codes

Id kullanımı bir yabancı anahtarla değil kodu olarak code_id.

Bu, tüm Sorunu doğru okuyorum üstleniyor