MySQL: Einträge mit mehrfachem String auswählen
Belkin
- php
0 EKKi0 suit0 Vinzenz Mai
Guten Tag,
ich habe eine MySQL-Tabelle mit mehreren Spalten (unter anderem "ID" und "url").
Wie kann ich nun alle Datenbank Einträge auswählen, die einen bestimmten String in "url" mehrfach enthalten (hier eine bestimmte URL, etwa http://www.google.de) und in PHP verarbeiten.
Ich habe mir die SQL-Funktion COUNT mal angesehen, bin jedoch überhaupt nicht weiter gekommen.
Wie muss ich fortgehen?
Danke schonmal...
Mahlzeit Belkin,
Wie kann ich nun alle Datenbank Einträge auswählen, die einen bestimmten String in "url" mehrfach enthalten (hier eine bestimmte URL, etwa http://www.google.de) und in PHP verarbeiten.
Könntest Du dazu bitte einmal ein paar Beispieldatensätze zeigen?
MfG,
EKKi
Mahlzeit Belkin,
Wie kann ich nun alle Datenbank Einträge auswählen, die einen bestimmten String in "url" mehrfach enthalten (hier eine bestimmte URL, etwa http://www.google.de) und in PHP verarbeiten.
Könntest Du dazu bitte einmal ein paar Beispieldatensätze zeigen?
MfG,
EKKi
Gerne: Etwa so:
---------------------------------------------------------------------
| ID | Name | URL |
---------------------------------------------------------------------
| 0 | Datei A| http://www.example.com ; http://www.example.de |
| 1 | Datei B| http://www.abx.com ; http://www.foo.de |
| 2 | Datei R| http://google.com |
| 3 | Datei X| http://google.de/search ; http://google.de |
| 4 | Datei Z| http://selfhtml.org ; http://cde.com |
---------------------------------------------------------------------
Der Fehler den ich nun finden möchte liegt im Datensatz mit der ID 3, da dort zweimal eine google.de Adresse im URL Feld steht.
Ich hoffe mein Anliegen wird hierdurch klarer.
Belkin
Mahlzeit Belkin,
Der Fehler den ich nun finden möchte liegt im Datensatz mit der ID 3, da dort zweimal eine google.de Adresse im URL Feld steht.
Dein Fehler liegt vielmehr im nicht normalisierten Aufbau Deiner Datenbank. Sinnvollerweise bräuchtest Du ungefähr folgende Struktur:
Tabelle "Datei":
ID | Name
----+---------
0 | Datei A
1 | Datei B
2 | Datei R
3 | Datei X
4 | Datei Z
(Wobei ich eine ID = 0 schon abenteuerlich finde ...)
Tabelle "URL":
ID | URL
----+-------------------------
1 | http://www.example.com
2 | http://www.example.de
3 | http://www.abx.com
4 | http://www.foo.de
5 | http://google.com
6 | http://google.de/search
7 | http://google.de
8 | http://selfhtml.org
9 | http://cde.com
Tabelle "Datei2URL":
Datei_ID | URL_ID
----------+--------
0 | 1
0 | 2
1 | 3
1 | 4
2 | 5
3 | 6
3 | 7
4 | 8
4 | 9
Ich hoffe mein Anliegen wird hierdurch klarer.
Ja. Um einen Umbau Deiner Tabellenstruktur kommst Du aber vermutlich nicht herum - das hatte suit ja bereits auch schon angemerkt.
MfG,
EKKi
Du willst also wissen wie oft der string "foo" in "foobarbazfoobar" vorkommt?
Ich habe mir die SQL-Funktion COUNT mal angesehen, bin jedoch überhaupt nicht weiter gekommen.
COUNT hilft dir hierbei nicht weiter, damit kannst du Datensätze zählen.
Wie muss ich fortgehen?
Fällt mir spontant nichts ein, die einzige mir bekannte Funktion in diese Richtung ist FIND_IN_SET, die erwartet aber eine kommaseparierte Liste und ist z.B. dafür geeignet, wenn man eine nicht vollständig normalisierte Datenbank hat (und eben irgendwo kommaseparierte werte in einem Feld stehen hat).
Hallo,
ich habe eine MySQL-Tabelle mit mehreren Spalten (unter anderem "ID" und "url").
Wie kann ich nun alle Datenbank Einträge auswählen, die einen bestimmten String in "url" mehrfach enthalten (hier eine bestimmte URL, etwa http://www.google.de) und in PHP verarbeiten.
warum? Wie sehen Beispieldaten aus? Was willst Du bezwecken?
Ich habe mir die SQL-Funktion COUNT mal angesehen,
diese Aggregatsfunktion kann Dir nach Deiner Beschreibung überhaupt nicht helfen.
Da MySQL keine eigene Funktion dafür anbietet, die die Häufigkeit einer Zeichenkette innerhalb einer anderen Zeichenkette ermittelt, könntest Du Dir diese Funktionalität mit einer Stored Function (reicht hier aus) selbst schreiben.
Freundliche Grüße
Vinzenz