Kayıt sitesi için Cron işi yönetmek için en iyi yol

0 Cevap php

Ben bizim ajanlar için bazı yeni özellikler gerekir bir kayıt web sitesi yönetmek. Neyi başarmaya çalışıyoruz şudur:

  • For every 3 members and agent enrolls, he receives a gift card (email sent to administrator to mail out)
  • For 10 enrollments in a month, the agent receives his/her marketing materials free of charge for a year (flag in our db changes)
  • For 25 total enrollments at any time, the agent receives his/her marketing materials free of charge for a year

Ben kriterleri (sadece php script cron işi kapalı çalışan) bir araya geldi SONRA meydana eylemleri oluşturma ile bir sorunum yok.

Karşılıklı sorunu ancak benim ekibinin diğer üyeleri ile görüş farkıdır. Her okullaşma sonunda, bir üye kaydı rekor memberID ve agentid dahil olmak üzere değişkenler bir dizi oluşturulur.

Esasen, onlar zaman belirli bir süre içinde belirli bir agentid için kayıtların toplam sayısına göre cron işi için üye kaydı tablosunu sorgulamak istiyorum. Anlıyorum sorunu Ancak, cron iş aramak için bilmek ya da nasıl bir döngü eylemleri işlemek için olmamasıdır.

Örneğin, tablo, bu (basitleştirilmiş, ilk satırda başlıklar) gibi görünüyor varsayalım:

memberid     agentid     date_enrolled
12345       7           2010-10-17 12:00:00
39283       3           2010-10-17 12:00:00
33839       4           2010-10-17 12:00:00
44848       7           2010-10-18 12:00:00
38383       5           2010-10-17 12:00:00
38383       7           2010-10-19 12:00:00

Haftalık Cron çalıştırırsanız yukarıdaki dayanarak, o anki haftasında 3 üye alındı ​​çünkü agentid 7 bir hediye kartı nedeniyle olduğunu bulur. 'İstediğiniz yöntemi' çalışacak eğer ben bir tek sorgu bir bakış açısıyla bu bakıyor olsaydı ben hiçbir sorun bina olurdu ama biz 300 üzerinden ajanları ve bilgiye sahip olarak görmek büyük ölçüde değişebilir, bilemiyorum.

Benim yol olsaydı, ben think Ben bir kayıt süresi bariyer (her hafta, açık sütun geçtiği zamanlar sadece tüm sütunları temizlemek için chron istihdam yaratmak sonra oluştu her zaman bir sayaç ile yeni bir tablo oluşturmak istiyorum 2 ve restart sayaç, her ay, açık sütun 3 ve sayaç yeniden başlatın).

Bizim takım istediği şekilde script ve cron işi oluşturmak için bile bir yolu var mı?

EDIT 1:

Takımın ihtiyaçlarına dayanarak, benim teklif sql sorgu satırları uzun bir şey olacağına inanıyorum:

SELECT COUNT(AGENT) FROM tablename GROUP BY AGENT WHERE enroll_date > DATE_SUB(CURDATE(),INTERVAL 7 DAY)

EDIT 2:

Burada aşk bir sürü almıyorum ;) benim sorgu daha sıkı yapmaya karar verdik ama başlangıçta kolay olacağını düşündüm sonuçlarını ayrıştırma zor bir zaman yaşıyorum. Ben başka içine bir sorgu tarafından döndürülen sonuçları kullanmanız gerekir.

Objective: Select all from tablename where the enrollment data is greater than 7 days ago, group by the agent number having a count greater than 3. Once results are returned, update unique flag field for EACH agent record returned in the result set from the previous query.

Benim ilk kodu:

$sql = $db->query("SELECT * FROM tablename WHERE enroll_date > DATE_SUB(CURDATE(),INTERVAL 7 DAYS) GROUP BY agentid HAVING COUNT(*) >= 3");
            $result = $sql->fetchALL(PDO::FETCH_ASSOC);
            foreach($result as $key=>$val) {
                echo $key.' - '.$val.'<br />';
            }

EDIT 3 - "final" script?

<?php

    try {   
            $db = new PDO('mysql:host=localhost;dbname=database', 'username', 'password');
            $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
            $db->beginTransaction();

            $sql = $db->query("SELECT AGENT FROM tablename WHERE enroll_date > DATE_SUB(CURDATE(),INTERVAL 1 WEEK) GROUP BY AGENT HAVING COUNT(*) >= 10 ORDER BY enroll_date ASC");

            $result = $sql->fetchALL(PDO::FETCH_ASSOC);
            foreach($result as $key=>$val) {
                foreach($val as $ball=>$face) {
                    echo $ball." - ".$face.'<br />';

                    $sql2 = "UPDATE tablename2 SET bonus_set=?, method=? WHERE agentID = '$face'";

                    $stmt = $db->prepare($sql2);
                    $stmt->execute(array("Y", "free"));


                    //NEED TO FIGURE OUT HOW TO EMAIL THE ENTIRE LIST TO MYSELF next...

                }

            }       

            $db->commit();
            $db->null;
            exit;
        }

    catch (PDOException $e)
        {
            $db->rollback();
            echo $e->getMessage();

            exit;
        }
?>

0 Cevap