Anzahl der Array Inhalte auslesen

oernilein

Mitglied
Hallo , ich komme irgendwie nicht so recht weiter.
Ich habe ein Datenbankfeld mit folgendem Inhalt.

55|56|98|112|129

Ich möchte nun die Anzahl auslesen und ausgeben. Also in dem Beispiel oben sollte 5 dann stehen.

Kann mir jemand helfen?
Vielen Dank im voraus.
 
Schau Dir mal die Funktion count() an.
Ansonsten, wenn Du die Anzahl der Elemente in einem SQL-ResultSet willst, dann wird wohl (fuer MySQL) mysql_num_rows() die richtige Wahl sein.
 
Mit Hilfe von der Funtkion explode() kannst du Teile eines Strings jeweils in ein Array lesen und dann mit entsprechenden Array-Funktionen den Array ausgeben oder einfach nur die Anzahl der Elemte ermitteln und ausgeben.

PHP:
<?php

  $data = "55|56|98|112|129";
  $pieces = explode("|", $data);

  // Ausgabe
  
  foreach($pieces as $datapieces){
    echo $datapieces . "<br>";
  }

  // Zählen

  echo count($pieces) . "Elemte im Datensatz";

?>
 
Packe den String mittels explode() in ein Array und von dem kannst du mit count() die Anzahl holen...

bsp:
PHP:
echo count(explode("|","12|34|56|132|456")); // echo "5";

zu spät :/
 
super.. Vielen Dank... Hat Super geklappt.

Ein letztes Problem habe ich jedoch noch. Vielleicht kann mir da auch jemand kurz weiterhelfen.

In der Datenbank habe ich nun bspw. folgende Einträge

ID, V_NAME, TEILNEHMER

1 - GoKart - 4|69|21|68
2 - Bowling - 21|68|70

Nun möchte ich über eine Abfrage herausfinden wer von den Teilnehmern bei wieviel Veranstaltungen gewesen ist.

Ich habe es mit

'SELECT count(ID) as ANWESEND FROM VERANSTALTUNGEN where TEILNEHMER like '%|68|%'

probiert. Das würde ja nur teilweise funktionieren. Wenn die 68 als erstes eingetragen ist, fehlt ja der | vorweg und somit wird die 68 dann nicht erkannt. Genauso funktioniert es nicht wenn ich die ID 6 durchsuchen lasse. Dann sagt die Abfrage das die 6 bei beiden veranstaltungen gewesen ist, weil er anscheinend die 69 als 6 und 9 erkennt.

Kann mir jemand sagen, wie ich abfragen kann ob ein Teilnehmer bei den Veranstaltungen gewesen ist
 
SQL:
SELECT count(`ID`) as ANWESEND 
FROM VERANSTALTUNGEN 
where TEILNEHMER like '%|68|%' OR '%|68' OR '68|%'

So vielleicht?

Bei einstelligen IDs würde ich vielleicht einfach mit einer führenden Null arbeiten. Wobei dieser Fehler bei meiner Form nicht auftreten sollte.
 
Hallo,

SELECT count(`ID`) AS ANWESEND
FROM VERANSTALTUNGEN
WHERE TEILNEHMER REGEX('*|*68*|*')
Wenn schon reguläre Ausdrücke, dann bitte auch richtig ;)

Code:
SELECT COUNT(`ID`) AS `ANWESEND` FROM `VERANSTALTUNGEN` WHERE TEILNEHMER REGEXP '(^|\\|)68(\\||$)'

Ich würde dir allerdings zu einem normalisieren Datenbankschema raten. Das würde dann etwa so aussehen:
Code:
 +----------+     +------------+     +------------+
 | Veranst. |     | Teilnahmen |     | Teilnehmer |
 +----------+     +------------+     +------------+
 | ID       |<--->| Veranst_ID |  +->| ID         |
 | Name     |     | Teiln_ID   |<-+  | Name       |
 +----------+     +------------+     | ...        |
                                     +------------+
„Teilnahmen“ stellt dann die Verbindung zwischen „Veranstaltungen“ und „Teilnehmer“ her. Jede Zeile dieser Tabelle sagt aus, dass der Teilnehmer mit der ID „Teilnehmer_ID“ (aus pragmatischen Gründen in der Grafik abgekürzt) an der Veranstaltung mit der ID „Veranstaltung_ID“ (ebenso) teilgenommen hat.

Die Anzahl der Veranstaltungen an der ein Teilnehmer teilgenommen hat, erhält man dann durch ein einfaches
Code:
SELECT COUNT(*) FROM `Teilnahmen` WHERE `Teilnehmer_ID` = 68
Die Anzahl der Teilnehmer einer bestimmten Veranstaltung dann entsprechend über
Code:
SELECT COUNT(*) FROM `Teilnahmen` WHERE `Veranstaltung_ID` = 123
Und die Liste der Teilnehmer ergibt sich (bspw.) aus
Code:
SELECT
  `Teilnahmen`.`Teilnehmer_ID`,
  `Teilnehmer`.`Name`
FROM
  `Teilnahmen`
LEFT JOIN `Teilnehmer`
  ON (`Teilnahmen`.`Teilnehmer_ID` = `Teilnehmer`.`ID`)
WHERE
  `Teilnahmen`.`Veranstaltung_ID` = 123
.

Auf Dauer fährst du mit dieser Lösung auf jeden Fall besser, da du viel flexibler auf deine Daten zugreifen kannst.

Grüße,
Matthias
 
Zurück