Tom: (MySQL) brauche Hilfe bei komplizierter(?) Abrage

Beitrag lesen

Hello Knud,

Beispielinhalt: 1001,2345,8765,3333

select count(ARTIKEL) from LISTE where find_in_set("1001",ARTIKEL);

So könntest Du nach jeder Artikelnummer einzeln suchen und diese zählen. Hat aber den Nachteil, dass nur die Sätze gezählt werden. Wenn also irgendwo eine Artikelnummer zweimal im Satz steht, wird das nur als Eins gezählt.

Mit PHP kann man sich natürlich ein Zählwerkzeug bauen. Das braucht aber viel Speicher. Vieviele Datensätze hast Du denn? Allerdings teilen sich MySQL und PHP den Speicherbedarf. MySQL trägt den Bärenanteil:

Select auf das Artikelfeld:

Select ARTIKEL from LISTE;

Dann in PHP

$liste = array();
while ($satz = mysql_fetch_assoc($res))
{
  $artikel=explode($satz["ARTIKEL"];
  foreach ($artikel as $key => $val)
  {
    $liste[$val]++;
  }
}

mysql_free_result($res); ## nicht vergessen.

echo <"pre">;
print_r($liste);
echo <"/pre">;

So könnte es klappen. Ist aber eben die Holzhackermethode.
Änder lieber Deine Datenstruktur.
Das kannst Du dann auch auf eine ähnliche Weise machen.
In der foreach()-Anweisung musst DU dann eben für jede Satznummer des Stammsatzes einen Satz mit $id, $val in einer neunen Tabelle erzeugen.

Grüße

Tom