Count für mysql

hey,
gibts sowas wie count bei php auch für mysql.
ich möchte auslesen, wie oft ein ausdruck (z.B abc) in einer abfrage vorkommt. ist das möglich?

grüße,
sebastian

Hi,

Müsste sich das nicht mittels mysql_num_rows lösen lassen wenn du in der entsprechenden Abfrage LIKE %abc% verwendest?

ich weiß nicht, ich glaub ich hab mich falsch ausgedrückt.
also ich mag in einer row die anzahl eines strings herausfinden, also nicht wieviele datensätze ausgegeben werden.

hab das count glaub verwechselt xD

Dann meinst du also “substr_count” ?

genau. gibts da nen mysql befehl dafür?^^

Nicht direkt.

Du könntest zwar alle Vorkommen deines Suchbegriffs im Text durch “Nichts” ersetzen lassen mit REPLACE(), und dann aus der Differenz von Originallänge und neuer Länge, dividiert durch die Länge des Suchbegriffes, die gewünschte Information erhalten.

Aber das klingt nicht sonderlich performant. Wenn es geht, solltest du das als erst scriptseitig in PHP ermitteln.

Dazu kannst du eine neue Funktion erstellen:

CREATE FUNCTION substrCount(s VARCHAR(255), ss VARCHAR(255)) RETURNS TINYINT(3) UNSIGNED LANGUAGE SQL NOT DETERMINISTIC READS SQL DATA
BEGIN
DECLARE count TINYINT(3) UNSIGNED;
DECLARE offset TINYINT(3) UNSIGNED;
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET s = NULL;

SET count = 0;
SET offset = 1;

REPEAT
IF NOT ISNULL(s) AND offset > 0 THEN
SET offset = LOCATE(ss, s, offset);
IF offset > 0 THEN
SET count = count + 1;
SET offset = offset + 1;
END IF;
END IF;
UNTIL ISNULL(s) OR offset = 0 END REPEAT;

RETURN count;
END;

In etwa so zu verwenden:

Das gibt dann ein Array mit den Anzahlen des Strings “abc” in der gegebenen Zelle pro Spalte an