Matthias: Hilfe bei der Ausgabe...

Hallo,
es ist ein wenig kompliziert aber ich hoffe jemand kann mir helfen.
Mehrere Artikel sind in einer Datenbank (MySQL) - Tabelle: "artikel" vorhanden.
Es gibt folgende Spalten:

Anschluss
Preis
Beschreibung
Artikelnummer
(idrandom, autoincrement, primärschlüssel)

Die meißten Artikel sind mit einer Beschreibung vorhanden. Jetzt gibt es aber welche wo ganz oben Beschreibung steht und dann mehrere Zeilen drunter sind z.B.

Normal siehts so aus:
Beschreibung: $Beschreibung
Anschluss  Preis        Artikelnummer
1,4        10.90 EUR    120123

Manchmal jedoch so:
Beschreibung: $Beschreibung
Anschluss  Preis        Artikelnummer
1,4        10.90 EUR    120123
1,2        20.10 EUR    102684
2,3        12.19 EUR    104133

Jetzt will ich mit ner Beziehung oder einer weitern Spalte in der ein Bezug steht, das z.B. 120123 zum 102684 mit reingehört., das so ausgeben wie's oben steht. Wenn's also ein Bezug gibt, das halt so wie oben "MANCHMAL JEDOCH SO" ausgeben.

Meine Abfrage ist momentan so:

$anfrage= "Select * from artikel";
$result = mysql_query($anfrage);
while($r=mysql_fetch_array($result))
{
hier wirds halt ausgegeben, aber ich krieg das so nicht hin wie ichs will
}

Ich hoffe ihr habts irgendwie verstanden, ist echt kompliziert... :)

Danke für euere Bemühungen

  1. Hallo.

    Also, wenn ich dich richtig verstehe, willst du die Artikel gruppieren, die die gleiche Beschreibung haben?
    Oder wie meinst du das?

    mfg

    1. Hallo.

      Also, wenn ich dich richtig verstehe, willst du die Artikel gruppieren, die die gleiche Beschreibung haben?
      Oder wie meinst du das?

      mfg

      Ja, wäre nicht schlecht.
      Aber dann solls die Beschreibung halt nur einmal ausgeben :)
      so wie's ich im Beispiel stehen hab...

      danke

      1. Dann gibts zwei Möglichkeiten.

        Entweder (da weiß ich aber nicht genau, ob das geht, aber müsste eigentlich) du startest eine neue Abfrage, wo du dir alle Datensätze mit eben dieser Beschreibung ausgeben lässt.
        Oder du legst dir einfach ein schönes Array an, wo du immer die Daten speicherst.

        Zu letzerem:
        Du guckst, ob die aktuelle Beschreibung schon mal im Array vorhanden ist, wenn nicht, fügst du sie und die dazugehörigen Daten hinzu.
        Falls sie schon existiert, hängst du einfach die Daten an den schon vorhandenen Satz an.
        So würde ich das jedenfalls tun.

        Hope it helps

        1. Zu letzerem:
          Du guckst, ob die aktuelle Beschreibung schon mal im Array vorhanden ist, wenn nicht, fügst du sie und die dazugehörigen Daten hinzu.
          Falls sie schon existiert, hängst du einfach die Daten an den
          schon vorhandenen Satz an.

          Wie kann ich schauen ob die aktuelle Beschreibung schonmal im Array vorhanden ist? Wie lautet das Script?
          Danke
          Matze

          1. Wie kann ich schauen ob die aktuelle Beschreibung schonmal im Array vorhanden ist? Wie lautet das Script?
            Danke
            Matze

            Lasse die finger von der Lösung....
            Der Ansatz von Dir beinhaltet Dein Problem.

            1. Lasse die finger von der Lösung....
              Der Ansatz von Dir beinhaltet Dein Problem.

              wie kann ich dies dann umsetzen?
              Warum sollte ich meine Datenbankstruktur ändern? Ich habe nur eine Tabelle (Name: artikel)
              da ist alles drin... :)

              1. Nun stelle Dir mal vor die Beschreibung ändert sich nun mußt Du in allen Artikeln mit der gleichen Beschreibung die Daten ändern.
                Das führt zu Redundanzen.
                Besorge die mal ein paar Bücher zur Datenbanktheorie..

          2. Ich hab grad mal die Antwort von Sorgenkind Mech durchgelesen ([pref:t=77131&m=444865])
            Machs so, wie er es beschrieben hat. Das ist die einfachste Lösung.
            Viel Erfolg

  2. moins

    wennich das jetz richtig verstanden habe müsste das so gehen:

    du speicherst immer die letzte beschreibung und vergleichst dann im nächsten gelieferten result, ob sich die beschreibung geändert hat, und schreibst nur dann die neue beschreibung

    beispiel:

    echo "<table>";
    $letztebeschreibung="";
    $query=mysql_query("select * from artikel ORDER BY beschreibung");
    while($r=mysql_fetch_assoc($query))
    {
     if($letztebeschreibung!=$r['beschreibung'])
     {
      echo "<tr><td colspan=3>Beschreibung: ".$r['beschreibung']."</td></tr>
      <tr><td>Anschluss</td><td>Preis</td><td>ArtNr</td></tr>";
     }
     echo "<tr><td>".$r['anschluss']."</td><td>".$r['preis']."</td><td>".$r['artikelnummer']."</td></tr>";
    }

    gruß

  3. Moin,
    Zunächst einmal...
    Wenn man keine Ahnung hat einfach mal nix sagen...

    Deine Daten befinden sich so wie von Dir beschrieben in einer Tabelle?
    Dann ändere dringend Deine DB Struktur.
    Wenn neine dann verstehe ich nicht Deine Abfrage... Wo bleibt die 2 Tabelle.
    Für mich hört sich das ganze nach Excel etc. an. Täusche ich mich da?

    TomIRL

    1. P.S. Sind zu jedem Artikel Beschreibungen vorhanden? ja/nein

      Sind die Beschreibungen identisch (Buchstabengleich)? ja /nein

      1. P.S. Sind zu jedem Artikel Beschreibungen vorhanden? ja/nein

        Sind die Beschreibungen identisch (Buchstabengleich)? ja /nein

        Ja sind zu jedem vorhanden...
        Sind buchstabengleich, ja!

        2x Ja...

        1. P.S. Sind zu jedem Artikel Beschreibungen vorhanden? ja/nein

          Sind die Beschreibungen identisch (Buchstabengleich)? ja /nein

          Ja sind zu jedem vorhanden...
          Sind buchstabengleich, ja!

          Ideallösung:
          Du lagerst die Artikelbeschreibungen in eine Seperate Tabelle aus.
          Noch besser Du überdenkst die DB Struktur hinsichtlich der normalformen.

          Nicht Ideal

          SELECT ... Order by Beschreibung

          in Deine while Schleife dann:

          if ($var['beschreibung']!=$v_OLD)
          print ("$var['beschreibung']");
          $v_OLD=$var['beschreibung'];

          print ("Die restlichen Artikel");

          TomIRL