Mehrere Werte einer Spalte auslesen
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
abfrage
array
code
datenbank
datum
genre
gesamte genre
http
info
leichter auswertungen
normalisierung
posten
schaffen
spalte
stehen
tabelle
url
vorschlag
wert test
zeile
-
Hallo zusammen!
Ich habe in einer Spalte mehrere Werte, die mit einem Komma getrennt sind und auszulesen wären. Und zwar habe ich da eine mysql-Tabelle mit der Spalte "Genres" und wie das Musik und Filme so an sich haben, fallen manche CD's und DVD's in mehrere Genres. Meine Fragen wären jetzt: Kann man überhaupt mehrere Werte einer Spalte abfragen und wenn ja, wie gestaltet sich eine solche Abfrage? Vielen Dank für Eure Hilfe!
Gruß,
webdesignerin
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Les den Wert aus und trenn den ausgelesenen Wert dann mit explode?
Wenn dein ausgelesener Wert so aussieht: "SciFi,Fantasy,Ganztollesgenre", dann mach explode(",",$Wert); und schon hast du die Teile in einem Array und fertig ausgelesen. -
Hallo midwar,
also eigentlich habe ich da einen Übersichtsseite mit dem Namen "Fantasy" und möchte, dass alle CD's oder DVD's angezeigt werden, die u.a. Fantasy als Genre haben. Wenn es nicht zu viel verlangt ist: Könntest Du das mit Deinem Code-Vorschalg ein bisschen ausführlicher erläutern oder einen längeren richtigen Beispielcode posten? Denn bis jetzt hatte ich noch nichts mit der explode-Funktion zu schaffen (ist mir völlig neu). Herzlichen Dank!
Gruß,
webdesignerin
Beitrag zuletzt geändert: 19.2.2013 18:09:53 von webdesignerin -
webdesignerin schrieb:
Wie wärs mit einer Abfrage mit
also eigentlich habe ich da einen Übersichtsseite mit dem Namen "Fantasy" und möchte, dass alle CD's oder DVD's angezeigt werden, die u.a. Fantasy als Genre haben.
?WHERE `genre` LIKE '%Fantasy%'
-
Hallo hackyourlife,
vielen Dank, so geht's! Und viel einfacher ist die Abfrage zudem auch noch.
Gruß,
webdesignerin -
webdesignerin schrieb:
Hallo midwar,
also eigentlich habe ich da einen Übersichtsseite mit dem Namen "Fantasy" und möchte, dass alle CD's oder DVD's angezeigt werden, die u.a. Fantasy als Genre haben. Wenn es nicht zu viel verlangt ist: Könntest Du das mit Deinem Code-Vorschalg ein bisschen ausführlicher erläutern oder einen längeren richtigen Beispielcode posten? Denn bis jetzt hatte ich noch nichts mit der explode-Funktion zu schaffen (ist mir völlig neu). Herzlichen Dank!
Gruß,
webdesignerin
Der Vorschlag von hackyourlife funktioniert natürlich, für alle die ein ähnliches Problem haben noch mein Vorschlag von gestern in Code ausgeschrieben:
// Auslesen der ganzen genres Spalte $genres = array(); $result = mysql_query("SELECT genres FROM table"); while($row = mysql_fetch_assoc($result)) { $genres[] = $row['genres']; } // Aufteilen der $genres Werte in seine Einzelteile $split = array(); foreach($genres as $genre) { $temp = explode(",",$genre); $split[] = $temp; }
Nicht getestet, einfach runtergeschrieben. Das Skript liest erst alle genre Spalten aus, danach benutzt es explode(), um die Werte in der Spalte genre aufzuteilen. Wenn du in genre Test1,Test2,Test3 stehen hast und alle mit einem Komma getrennt sind, dann sorgt explode(",",$genre); dafür, dass wir als return Wert ein Array haben, dass in $array[0] den Wert Test1 in $array[1] den Wert Test 2 und in $array[2] den Wert Test 3 hat. Danach kannst du das ganze dann weiterverarbeiten.
(http://www.php.net/manual/de/function.explode.php)
Beitrag zuletzt geändert: 20.2.2013 5:29:04 von midwar -
mein Vorschlag für alle:
Normalisiert eure Datenbanken!
es kann doch nciht sein, dass multiple werte in einem Feld auch noch mehrfach drin stehen... dann noch nicht mal die ID aus einer Tabelle, wo die Genres aufgeführt werden, sondern einfach so klartext...
http://de.wikipedia.org/wiki/Normalisierung_(Datenbank)
http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
dann habt ihr einfach 3 Tabellen, die ihr miteinander verknüpfen müsst und könnt die gesamte Genre-Abfrage ohne eine PHP-Zeile aus der Datenbank rausholen... zudem kann man auch wesenlich leichter auswertungen machen, wenn die verknüpfungstabelle die IDs beider Tabellen als primärschlüssel erhält verhhindert man sogar dopplungen... bei referenzieller Integrität verhindert man löschungen belegter werte... ohne eine Zeile PHP... so wird es schwerer, die DB kaputt zu machen...
so spart ihr euch inperformantes PHP, die DB ist immer schneller... -
sebulon schrieb:
mein Vorschlag für alle:
Normalisiert eure Datenbanken!
es kann doch nciht sein, dass multiple werte in einem Feld auch noch mehrfach drin stehen... dann noch nicht mal die ID aus einer Tabelle, wo die Genres aufgeführt werden, sondern einfach so klartext...
http://de.wikipedia.org/wiki/Normalisierung_(Datenbank)
http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
dann habt ihr einfach 3 Tabellen, die ihr miteinander verknüpfen müsst und könnt die gesamte Genre-Abfrage ohne eine PHP-Zeile aus der Datenbank rausholen... zudem kann man auch wesenlich leichter auswertungen machen, wenn die verknüpfungstabelle die IDs beider Tabellen als primärschlüssel erhält verhhindert man sogar dopplungen... bei referenzieller Integrität verhindert man löschungen belegter werte... ohne eine Zeile PHP... so wird es schwerer, die DB kaputt zu machen...
so spart ihr euch inperformantes PHP, die DB ist immer schneller...
Normalisierung ist vielleicht angebracht, wenn man Datenbanken mit 10.000.000 oder mehr Einträgen, aber nicht bei einer solchen Datenbank. Wenn man den Query richtig macht, wird man bei der Größenordnung immer noch sehr schnell zu einem Ergebnis kommen. Das rechtfertigt den Aufwand und die potentiellen Probleme nicht.
So schwer ist das gar nicht, die DB kaputt zu bekommen, einen falschen Wert verändert und schon kannst du es vergessen.
Zudem ist es auch nicht so, dass PHP immer langsamer als die DB ist. So lang du nur Daten aus einer Tabelle abrufst und sonst nicht viel machst (Daten zusammenfassen und solche Sachen), ist die DB schon schnell, aber wenn es dann darum geht, Einträge zu zählen, zusammen zu fassen oder komplizierte Zusammenhänge abzurufen, wird das um einiges schneller sein, wenn du alle relevanten Einträge abrufst und den Rest mit PHP machst. Ausjedenfall in Größenordnungen von <= 10.000.000 Einträgen. -
es lohnt sich schon bei geringerne projekten Sauber zu arbeiten, vor allem, wenn man nicht wieß, wie sich das entwickelt... oft shcon gehabt, dass dann plötzlich ganze datenbanken postum normalisiert werden mussten und der Code umgeschrieben werden musste für dne Zugriff, weil sauberes Arbeitne sich für dne projektumfang wohl nicht gelohnt hätte...
Fakt ist: normalisierte Datenbanken sind in der Ausdehnung extrem skalierbar, ohne dass man änderungen vornehmen muss bei steigender Auslastung... außerdem ist auslastung nciht nur datenbestandsabhängig, sondern auch zugriffsabhängig... wenn die halbe DB 10000 mal wegen 10000 offener sessions im Cache liegt, ist das auch nicht gerade förderlich...
in dem fall jetzt ist das nicht der fall, abr normalisierung würde sich mehr als anbieten... -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage