Andreas: Blättern...

Hi,

habe eine Tabelle aus der ich Produktlinie dann die Gruppen und zum Schluß
die Artikel aus der DB auslese.

Aufbau für die Darstellung pro Seite:
LIMIT $start,$limit
if($start == "") { $start = 0;}

if($gstart == ""){ $gstart = 0;}

$limit = 3;

Produktlinie_1
Gruppe_1
Artikel_1
Artikel_2
Artikel_3

Wechsel der Gruppe:

Produktlinie_1
Gruppe_2
Artikel_4
Artikel_5
Artikel_6

neue Seite
Produktlinie_1
Gruppe_2
Artikel_7
Artikel_8

Wechsel der Produktlinie:

Produktlinie_2
Gruppe_3
Artikel_9
Artikel_10
Artikel_11

Ansatz:
// $patotal_summe = Anzahl der Artikel pro Gruppe
// $total = Gesamtzahl aller Artikel

echo "| $patotal_summe von $total Artikel | ";

if($patotal_summe <= 3)
{
 $next = $start + 0;
 $gnext = $gstart + 1;
 echo"<a href=".PHP_SELF."?mw=$mw&start=".$next."&gstart=".$gnext.">vor
&gt;</a> |";
}

wie schaffe ich es das er mir zwischen den Artikel und Gruppen blättert
wie muß ich am besten abfragen

ich habe die Gesamtzahl der Artikel
und habe die Gesamtzahl der Artikel der Gruppen

Danke für jede Hilfe
die  Blätterfunktion wie unter
http://www.php-center.de/artikel/blaettern.php3
hilft mir nicht weiter, da ich noch eine Untergruppierung habe

Andreas

  1. Hallo Andreas,

    Ja, ja das Blättern ...

    Verwendest du eventuell PEAR-Packages?
    Wenn nicht, wäre gerade so eine Problematik es wert, einen Blick
    in diesen Fundus zu werfen. Ich poste dir ein Beispiel, das aber mit deiner Anwendung noch nichts gemein hat. Ein bisschen Gehirnschmalz solltest du selber auch beisteuern. Man muss zwar ein bisschen Überlegungsarbeit leisten, um solche Packages zu verstehen, dann aber sind sie meist eine große Hilfe, und man kann sie für den Eigenbedarf gut zurecht schneidern.
    Voilà:

    // Beispiel mit einem einfachen PEAR Pager

    include ("../etc/config.php");
    require_once 'Pager.php';

    db_get($db, DB_NAME, DB_LOGIN, DB_PASSWD, DB_HOST, DB_SYSTEM);

    $from = isset($_REQUEST['from']) ? $_REQUEST['from'] : 0;      // The row to start to fetch from (you might want to get this
                                    // param from the $_GET array
    $limit = 20;                    // The number of results per page
    $maxpages = 10;                 // The number of pages for displaying in the pager (optional)

    $sql = "SELECT * FROM formen";
    $res = $db->limitQuery($sql, $from, $limit);
    if (DB::isError($res))
        die ("Hopfen und Malz verloren");

    $n = 0;
    while($line = $res->fetchRow())
    {
        print "<a href="xxx.php?par='".$line["parameter"]."'">".$line["parameter"]."</a> : ".$line["parameter"]."<br>";
        $n++;
    }

    $data = DB_Pager::getData($from, $limit, $res->numRows(), $maxpages);

    print "<br><br>";
    //display previous link
    printf('<a href="%s?from=%d">Previous</a> |', $_SERVER['PHP_SELF'],$data['prev']);
    //display page links
    foreach($data['pages'] as $page=> $start)
    {
       if ($start == $from)
           printf(' %d | ', $page);
       else
           printf('<a href="%s?from=%d">%d</a> | ',$_SERVER['PHP_SELF'], $start, $page);
    }
    //display next page link
    printf('<a href="%s?from=%d">Next</a>',$_SERVER['PHP_SELF'],$data['next']);
    //display the records part
    printf(" Displaying records %d- %d of %d)",$data['from'],$data['to'],$data['numrows']);

    Ein komfortablerer Pear Pager ist jener von Richard Heyes

    Blätterproblematiken lassen sich auch mit Template-Engines wie Smarty mit seinen sections gut und unaufwändig lösen.

    Michael

    1. Hi,

      verwende nicht PEAR Pager hatte verschiedene andere die mir aber nicht für diesen Zweck nicht weitergeholfen hatten. Mir fehlt der Ansatz für mein Problem

      Nochmal aufgelistet unter http://forum.de.selfhtml.org/?t=91168&m=548188

      Gruss
      Andreas

      1. verwende nicht PEAR Pager hatte verschiedene andere die mir aber nicht für diesen Zweck nicht weitergeholfen hatten. Mir fehlt der Ansatz für mein Problem

        Na gut, machen wir das Ganze zu Fuß ohne zu Hilfenahme eines Pagers, wobei ich unterstreichen möchte, dass es mit einem der genannten Pager leicht machbar wäre.

        Du startest also mit einer bestimmten Linie, mit einer bestimmten Gruppe und ev. mit einem bestimmten Artikel.

        <?PHP

        $linie   = $_GET['von_linie'];
        $gruppe  = $_GET['von_gruppe'];

        $sql = "SELECT l.linie, g.gruppe, a.artikel, a.artikelbeschreibung FROM artikeltabelle a,
                LEFT JOIN gruppe g ON g.gruppe = a.gruppe
                LEFT JOIN linie l ON l.linie = g.linie
                WHERE l.linie   = ".$_GET['von_linie']." AND
                      g.gruppe  = ".$_GET['von_gruppe']." AND
                      a.artikel > ".$_GET['von_artikel']."
                ORDER BY l.linie, g.gruppe, a.artikel
                limit 3";
        $result = $mysql_query($sql, $from, $limit);
        if (mysql_num_rows($result) < 1) die ({Operation bei 0 Records});

        $n = 0;
        while($line = $mysql_fetch_array($result))
        {
            if ($line['linie'] != $linie)
            {
                {Operationen für Liniengruppenwechsel}

        $linie = $line['linie'];
                $gruppe = $line['gruppe'];
            }

        if ($line['gruppe'] != $gruppe)
            {
                {Operationen für Artikelgruppenwechsel}

        $gruppe = $line['gruppe'];
            }

        print "<a href="".$_SERVER['SELF_PHP']."?artikel='".$line["artikel"]."'">".$line["artikel"]."</a> : ".$line["artikel"]."<br>";

        $von_linie   = $line['linie'];
            $von_gruppe  = $line['gruppe'];
            $von_artikel = $line['artikel'];
            $n++;
        }

        ?>

        <html>
        <input type="hidden" name="von_linie" value="<?PHP echo $von_linie; ?>">

        Das ganze HTML-Drumherum (aber vielleicht verwendest du eine Template-Engine) lasse ich mal weg.

        Hilft dir das?

        Michael

        1. Hallo,

          Hilft dir das?

          ich denke ja,
          werde mal gleich rumbasteln.
          Jetzt habe ich mal einen Ansatz

          Vielen vielen Danke
          :-)

        2. Hi,

          $sql = "SELECT l.linie, g.gruppe, a.artikel, a.artikelbeschreibung FROM artikeltabelle a,
                  LEFT JOIN gruppe g ON g.gruppe = a.gruppe
                  LEFT JOIN linie l ON l.linie = g.linie
                  WHERE l.linie   = ".$_GET['von_linie']." AND
                        g.gruppe  = ".$_GET['von_gruppe']." AND
                        a.artikel > ".$_GET['von_artikel']."
                  ORDER BY l.linie, g.gruppe, a.artikel
                  limit 3";

          wenn ich das richtig verstanden habe bezieht sich das ganze auf mehrere Tabellen oder?

          Habe aber nur eine Tabelle, da ich eine Textdatei zum auslesen erhalte.
          :-(

          1. Habe aber nur eine Tabelle, da ich eine Textdatei zum auslesen erhalte.
            :-(

            Ein Quentchen mehr an Phantasie, bitte! wenn du die Linien- sowie die Gruppeninformation in einer Tabelle hast, dann brauchst du diese Joins natürlich nicht zu machen. Ich hatte halt vermutet, dass die genannten Informationen - relational orthodox - in getrennten Tabellen gelagert wären. Wenn nicht, gleichst du die Abfrage an die Verhältnisse an.

            Michael

            1. Ein Quentchen mehr an Phantasie, bitte!

              wenn du die Linien- sowie die Gruppeninformation in einer Tabelle hast, dann brauchst du diese Joins natürlich nicht zu machen. Ich hatte halt vermutet, dass die genannten Informationen - relational orthodox - in getrennten Tabellen gelagert wären. Wenn nicht, gleichst du die Abfrage an die Verhältnisse an.

              1.
              bin kein Profi,

              2.
              hätte ich auch gerne gemacht aber ich habe ein Verständnis Problem

              $von_linie   = $line['linie'];
              $von_gruppe  = $line['gruppe'];
              $von_artikel = $line['artikel'];

              enthalten dieser Variable einen Zahlenwert?

              bin ich blind, woher kommt dieser?

              1. $von_linie   = $line['linie'];
                $von_gruppe  = $line['gruppe'];
                $von_artikel = $line['artikel'];

                enthalten dieser Variable einen Zahlenwert?

                Also, du brauchst ja die Information, zu welcher Linie und zu welcher Gruppe deine Artikel gehören; wo hast du denn diese Informationen? Normalerweise ist in einer Artikeltabelle
                dann eine Linien_Id und eine Gruppen_Id, die auf eine Linien-Tabelle bzw. auf eine Gruppen-Tabelle verweisen, in der die Beschreibungen stehen.

                Nach deinen Hinweisen zu urteilen, scheinen diese Informationen aber im Artikelrecord selber implementiert zu sein. Du sprachst ja von der Hierarchie:

                Linie    -->  (Id = 1)   Bezeichnung = Metall
                    Gruppe --> (Id = 4)    Bezeichnung = Boxen

                Artikel  Id = 1022  Bezeichnung = Metallbox 20 x 50
                       Artikel  Id = 1324  Bezeichnung = Metallbox 30 x 50
                       Artikel  Id = 1400  Bezeichnung = Metallbox 40 x 50

                Na, irgendwo brauchst du diese Angaben in deiner Informationsstruktur, damit du die Hierarchie wie gewollt auslesen kannst. Es müssen nicht zwingend numerische Identitäten sein.

                Du willst mich, hoffentlich, nicht pflanzen? Denn das gehört eigentlich zum low-level Datenbank-Knoff-Hoff.

                Michael

                1. Hi,

                  Nach deinen Hinweisen zu urteilen, scheinen diese Informationen aber im Artikelrecord selber implementiert zu sein. Du sprachst ja von der Hierarchie:

                  wenn ich die Daten so hätte dann ja, aber die habe ich nicht so
                  Tabelle = artikel

                  idint(6) NOT NULL auto\_increment, pl_linievarchar(15) NOT NULL default '', pl_gruppevarchar(25) NOT NULL default '', artikel` text NOT NULL,
                  ...
                  pl_linie = AluPlus, ProfiPlus
                  pl_gruppe = Box, Set
                  artikel = Artikel1, Artikel2...

                  Zuerst kommt Die Produktlinie:
                  $sql_linie = @mysql_query("SELECT pl_linie FROM artikel
                  WHERE pl_linie <> ''
                  AND pl_gruppe  <> ''
                  GROUP BY pl_linie
                  ORDER BY pl_linie");
                  ...

                  dann die Produktgruppe:
                  $sql_group = @mysql_query("SELECT pl_gruppe FROM artikel
                  WHERE pl_linie = '".$zeile1["pl_linie"]."'
                  AND pl_gruppe  <> ''
                  GROUP BY pl_gruppe
                  ORDER BY pl_gruppe
                  LIMIT 0,1");
                  ...

                  und dann der Artikel:
                  $sql_artikel= @mysql_query("SELECT * FROM artikel
                  WHERE pl_linie = '".$zeile1["pl_linie"]."'
                  AND pl_gruppe  = '".$zeile2["pl_gruppe"]."'
                  ORDER BY m_artikelbezeichnung_de,makuba_nr
                  LIMIT $start,3");

                  Darstellung auf der Seite

                  AluPlu (Produktlinie)
                  Box (Produktgruppe)
                  Artikel (pro seite max 3 Stück)

                  1. idint(6) NOT NULL auto\_increment, pl_linievarchar(15) NOT NULL default '', pl_gruppevarchar(25) NOT NULL default '', artikel` text NOT NULL,
                    ...

                    Doch, lieber Andreas, es scheint, dass du die Informationen so in der Artikeltabelle stehen hast, wie ich es vermutet habe. Aber dein Gedankengang ist eigenartig vertrackt. Hier nochmals mein leicht angepasster ursprünglicher Lesevorschlag. Die Linien- und Gruppenfelder sowie die Artikelid (oder alternativ die Bezeichnung je nach Sortierung) musst du als Hidden-Felder über Get oder Post an die nachfolgende Session übertragen. Wieso machst du zuerst getrennte Leseversuche auf die Linien und dann auf die Gruppen. Das ist Stumpfsinn!

                    $linie   = $_GET['von_linie'];
                    $gruppe  = $_GET['von_gruppe'];

                    $sql = @mysql_query("SELECT * FROM artikel
                                         WHERE artikel > '".$_GET['von_artikel']."'
                                         ORDER BY pl_linie, pl_gruppe, id (oder m_artikelbezeichnung_de)
                                         LIMIT 3");

                    $result = $mysql_query($sql);
                    if (mysql_num_rows($result) < 1) die ("no records");

                    $n = 0;
                    while($line = $mysql_fetch_array($result))
                    {
                        if ($line['pl_linie'] != $linie)
                        {
                            {Operationen für Liniengruppenwechsel}

                    $linie  = $line['pl_linie'];
                            $gruppe = $line['pl_gruppe'];
                        }

                    if ($line['pl_gruppe'] != $gruppe)
                        {
                            {Operationen für Artikelgruppenwechsel}

                    $gruppe = $line['pl_gruppe'];
                        }

                    print "<a href="".$_SERVER['SELF_PHP']."?artikel='".$line["artikel"]."'">".$line["artikel"]."</a> : ".$line["artikel"]."<br>";

                    $von_artikel = $line['id'];
                        // oder alternativ
                        $von_artikel = $line['m_artikelbezeichnung_de'];

                    $n++;
                    }

                    Michael

                    1. Hi,

                      könnten wir darüber telefonieren :?

                      wäre mir wichtig

                      1. könnten wir darüber telefonieren :?

                        Habe schon ein Mail an dich abgeschickt.

                        Michael

  2. Hallo!

    Produktlinie_1
      Gruppe_1
         Artikel_1
         Artikel_2
         Artikel_3

    Wechsel der Gruppe:

    Produktlinie_1
      Gruppe_2
         Artikel_4
         Artikel_5
         Artikel_6

    neue Seite

    Produktlinie_1
       Gruppe_2
         Artikel_7
         Artikel_8

    Wechsel der Produktlinie:

    Produktlinie_2
       Gruppe_3
         Artikel_9
         Artikel_10
         Artikel_11

    Ich verstehe das System nicht, also was auf einer Seite angezeigt werden soll. Warum splitest Du die Produktlinie_1+Gruppe_2? Wieviele Artikel sollen auf einer Seite angezeigt werden? Aus unterschiedlichen Linien und Gruppen?

    MfG, André Laugks

    --
    L-Andre @ gmx.de
    1. Hi,

      Ich verstehe das System nicht, also was auf einer Seite angezeigt werden soll. Warum splitest Du die Produktlinie_1+Gruppe_2? Wieviele Artikel sollen auf einer Seite angezeigt werden? Aus unterschiedlichen Linien und Gruppen?

      ich versuche es mal so.

      Aufbau der Seite
      Headline_1 = Produktline
      Headline_2 = Gruppe //verknüpft mit Hadline_1
      Artikeln = //verknüpft mit Hadline_1 und Hadline_2

      Auf der Seite werden max. 3 Artikel angezeigt

      z.B.
      Produktlinie = ALUPLUS, DINOPLUS
      Gruppe zu ALUPLUS = BOX, ProfiBox , METALL
      Artikel zu ALUPLUS aufgeteilt in den Gruppen  BOX, ProfiBox , METALL

      ALUPLUS / BOX
      Artikel_aluplus_box_1
      Artikel_aluplus_box_2

      jetzt kommt ein Seitenwechsel und einem Gruppenwechsel

      ALUPLUS / ProfiBox
      Artikel_aluplus_profibox_1
      Artikel_aluplus_profibox_2
      Artikel_aluplus_profibox_3

      jetzt kommt nur ein Seitenwechsel bei gleicher Gruppe

      Artikel_aluplus_profibox_4

      dann wieder einen Seitenwechsel und einen Gruppenwechsel

      ALUPLUS / METALL
      Artikel_aluplus_metal_1
      Artikel_aluplus_metal_2

      jetzt kommt ein Seitenwechsel mit einem Produktlinienwechsel und einem Gruppenwechsel

      DINOPLUS
      ...

      ich hoffe das versteht man jetzt :-)
      Danke