Ankündigung

Einklappen
Keine Ankündigung bisher.

Paar Probleme bei Auktionsscript

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Paar Probleme bei Auktionsscript

    Hi
    Ich programmiere gerade ein Auktionsscript, ich verwende als Template Klasse "Smarty" und als DB Klasse "ezSql", da ich diese sehr gut finde und die DB Klasse auch sehr gut mit Smarty zusammen arbeitet...
    Nun zu meinen Problemen:

    1. Problem:
    ich hab eine Tabelle für meine Kategorien, diese sind so aufgebaut:
    - cat_id
    - cat_name
    - main_cat_id (wenn hier 0 steht dann ist es eine hauptkategorie und wenn eine zahl drinen steht, dann ist es eine subkategorie und die zahl is die cat_id der Hauptkategorie)

    Und das will will ich richtig auslesen, dass da z.B. steht:
    Hauptkategorie 1
    - Subkategorie
    Hauptkategorie 2
    - Subkategorie
    .
    .

    2. Problem:
    Ich weiß nicht wie ich es machen soll, dass die Auktionen automatisch ablaufen.? Hab natürlich die Startzeit als Timestamp und die Ablaufzeit in Tagen, wenn nötig könnte ich den Timestamp des Ablaufs natürlich auch berechnen... Ich hab schon in mehreren Foren gefragt, doch ich konnte nirgends eine nützliche Antwort bekommen...
    Es gäbe die Möglichkeit bei jedem Aufruf zu prüfen, ob die Ablaufzeit schon überschirtten ist, allerdings will ich, dass man eine E-Mail bekommt, wenn die Auktion abgelaufen ist, außerdem wenn ich jetzt eine Auktion einstelle und die Laufzeit auf 8 Tage stelle, dann soll sie ja in 8 Tagen um die selbe Zeit ablaufen, auch wenn sie keiner aufruft. Versteht ihr was ich meine?
    Ich hoffe mir kann jemand helfen...
    Natürlich erwarte ich keine fertigen Codes, da ja auch nicht jeder die DB Klasse kennt, mir wäre schon geholfen, wenn mir jemand einen Lösungsvorschlag erklärt...
    Danke


  • #2
    Zum ersten Punkt das nennt man dann rekursives auslesen. Aber da kann ich dir leider auch nicht helfen da ich da selber grad dran knaubel und auf keinen grünen Zweig komme! Aber wenn du eine gut besuchte Auktionsseite haben willst kann ich dir nur empfehlen dich mit nested sets auseinander zu setzen,aber das rappel ich auch nicht. Ich weis nur das da die DB performance nicht so strapaziert wird!

    Und bei deim zweiten Problem musst mal googeln. Du musst die Zeit der Tage berechnen ab dem Startdatum und wenn die berechnete Zeit abgelaufen ist machst du in einem if() Zweig halt eine entsprechende SQL Anweisung!
    Aus dem Dynamo Lande kommen wir. Trinken immer reichlich kühles Bier. Und dann sind wir alle voll, die Stimmung ist so toll. Aus dem Dynamo Lande kommen wir.
    http://www.lit-web.de

    Kommentar


    • #3
      Hi
      Danke für deine rasche Antowort.
      Zu dem 2. Punkt, die Abfrage ist gar nicht so ein großes Problem, also zum z.B . vergleichen, allerdings müsste das ja jede Sekunde aufgerufen werden...

      Kommentar


      • #4
        Für die auto-Email-Versendung käme evtl. ein cronjob in Frage.

        Falls deine Seite gut besucht ist, kannst du auch bei jedem Start deiner Index-Seite die Email-Versendungs-Abfrage selber starten.

        Kommentar


        • #5
          Ja das Problem ist nur, dass ich den Cronjob ja nicht sekündlich das aufrufen lassen kann...

          Kommentar


          • #6
            Zu 1)
            sql hierarchical data - Google Search

            Zu 2) Du musst es ja auch nicht sekündlich laufen lassen. Irgendein Intervall reicht ja aus, sagen wir alle 10 Minuten werden alle abgelaufenen Auktionen abgearbeitet. Und wenn jemand in der Zeit zwischen Ende der Auktion und nächstem 10-Minuten-Intervall die Daten abruft, kannst Du es ja auch berechnen lassen.

            Kommentar


            • #7
              Hi
              Danke die Möglichkeit ist nicht schlecht, werde ich dann sofort versuchen...
              andere Frage, ich will gerade alle Auktionen aus einer Kategorie anzeigen, doch es klappt nicht so ganz...
              So kann ich alle Auktionen einer Kategorie auslesen:
              PHP-Code:
              $auct $db->get_row('SELECT * FROM auctions WHERE sub_category = 2'); 
              Allerdings will ich die dazugehörigen Gebote aus der Tabelle "bids" auch auslesen. Wie funktioniert das? Vermutlich mit einem JOIN, allerdings bekomm ich es nicht ganz hin... Will dann anzeigen, wie viele Gebote vorhanden sind und den aktuellen Preis.
              Danke

              Kommentar


              • #8
                Das geht mit einer Kombination aus Max/Count,JOIN,WHERE und GROUP BY.
                Wie das genau aussieht, hängt von den beiden Tabellendefinitionen ab.

                Kommentar


                • #9
                  Hi
                  Kannst du mir da vll. ein Bsp. zeigen mit irgendwelchen Namen?
                  Ich will Titel, Bild, Gebote, Akutelles Gebot und Verbleibende zeit anzeigen.
                  Danke

                  Kommentar


                  • #10
                    Code:
                    CREATE TABLE  `auctions` (
                      `id` int(11) default NULL,
                      `sub_category` int(11) default NULL,
                      `title` varchar(50) default NULL
                    );
                    
                    CREATE TABLE `bids` (
                      `id` int(11) default NULL,
                      `auction_id` int(11) default NULL,
                      `amount` int(11) default NULL
                    );
                    
                    INSERT INTO
                      `auctions`
                      (`id`, `sub_category`, `title`)
                    VALUES
                      (1,2,'a'),
                      (2,2,'b'),
                      (3,1,'c'),
                      (4,2,'d');
                    
                    INSERT INTO
                      `bids`
                      (`id`, `auction_id`, `amount`)
                    VALUES
                      (1,2,10),
                      (2,2,15),
                      (3,1,10),
                      (4,2,20);
                    Code:
                    SELECT
                      auctions.id, auctions.title, Max(bids.amount), Count(bids.id)
                    FROM
                      auctions
                    LEFT JOIN
                      bids
                    ON
                      auctions.id=bids.auction_id
                    WHERE
                      auctions.sub_category=2
                    GROUP BY
                      auctions.id

                    Kommentar


                    • #11
                      Danke, hab noch ein Problem beim AUfruf des Aktuellen Gebots und der Anzahl der Gebote...
                      Und zwar sieht das im moment so aus:

                      $tpl->assign("auction", $db->get_results('SELECT auctions.id, auctions.title, Max(bids.bid), Count(bids.id),
                      auctions.img1 FROM auctions LEFT
                      JOIN bids ON auctions.id=bids.auction WHERE auctions.sub_category='.$id.' GROUP BY auctions.id'));

                      Template:
                      Code:
                              {foreach from=$auction item="auct"}
                              <a href="auktion-{$auct->id}.html"><img src="thumbnail.php?bild=img/{$auct->img1}" />
                               - {$auct->title} - {$auct->Count(bids.id)} - {$auct->Max(bids.bid)}
                              </a><br />
                              {/foreach}
                      Das Bild, der Titel und die ID werden auch angezeigt, aber die anderen zwei nicht, woran liegt das?
                      Danke

                      Kommentar


                      • #12
                        Keine Ahnung. Wesentlich zu wenig Informationen.

                        Kommentar


                        • #13
                          Was brauchst du denn für Informationen?
                          Danke

                          Kommentar


                          • #14
                            Die genau Tabellendefinition und die Testdaten in den Tabellen.
                            Und was gibt
                            PHP-Code:
                            $records $db->get_results('SELECT auctions.id, auctions.title, Max(bids.bid), Count(bids.id),
                            auctions.img1 FROM auctions LEFT
                            JOIN bids ON auctions.id=bids.auction WHERE auctions.sub_category='
                            .$id.' GROUP BY auctions.id');
                            var_dump($records);
                            $tpl->assign("auction"$records); 
                            aus?

                            Kommentar


                            • #15
                              Das gibt folgendes aus:
                              PHP-Code:
                              array(2) {   [0]=>   object(stdClass)#15 (5) {     ["id"]=>     string(1) "1"     ["title"]=>     string(40) "Test 1"     ["Max(bids.bid)"]=>     NULL     ["Count(bids.id)"]=>     string(1) "0"     ["img1"]=>     string(11) "1369833.jpg"   }   [1]=>   object(stdClass)#16 (5) {     ["id"]=>     string(1) "2"     ["title"]=>     string(30) "Test 2"     ["Max(bids.bid)"]=>     string(6) "149,00"     ["Count(bids.id)"]=>     string(1) "2"     ["img1"]=>     string(13) "1369833_3.jpg"   } } 

                              Kommentar

                              Lädt...
                              X