Probleme mit 'ORDER BY' in sql-abfrage!

Fragen zu allen Themen rund ums Programmieren außerhalb von phpBB können hier gestellt werden - auch zu anderen Programmiersprachen oder Software wie Webservern und Editoren.
Antworten
Jason

Probleme mit 'ORDER BY' in sql-abfrage!

Beitrag von Jason »

Hi,
ich habe in meinem Forum eine kleine DVD Datenbank in der die Benutzer auch nach DVD´s suchen können. Die gesuchten DVD´s werden aus der DB mit folgendem Query ausgelesen:

Code: Alles auswählen

$sql = "SELECT *
FROM " .DVD_TABLE . ',' .DVD_CAT_TABLE ."
WHERE `$where` LIKE '%" . $search . "%'
LIMIT 0,5;
$where enthält den namen der Spalte in der gesucht werden soll z.b. Author und $search enthält das wort nachdem gesucht werden soll.

Das liest die ersten 5 DVDs aus der datenbank aus mit den dazugehörenden kategoriennamen nun würde ich diese ausgabe gerne nach dvd_title sortieren lassen dazu habe ich ORDER BY dvd_title hinzugefügt:

Code: Alles auswählen

$sql = "SELECT *
FROM " .DVD_TABLE . ',' .DVD_CAT_TABLE ."
WHERE `$where` LIKE '%" . $search . "%'
ORDER BY dvd_title
LIMIT 0,5;
Leider funktioniert das nicht jetzt wird nurnoch 1 Datensatz ausgegeben und nicht wie es sein sollte 5 :(

Hat irgendjemand ne idee wo der fehler liegen könnte?

Grüße Jason
PhilippK
Vorstand
Vorstand
Beiträge: 14662
Registriert: 13.08.2002 14:10
Wohnort: Stuttgart
Kontaktdaten:

Beitrag von PhilippK »

Hast du die Query auch mal direkt ausprobiert (also z.B. mit phpMyAdmin)?

Gruß, Philipp
Kein Support per PN!
Der Sozialstaat ist [...] eine zivilisatorische Errungenschaft, auf die wir stolz sein können. Aber der Sozialstaat heutiger Prägung hat sich übernommen. Das ist bitter, aber wahr. (Horst Köhler)
Meine Mods
Jason

Beitrag von Jason »

Hi,
so gehts wunderbar vieleicht habe ich ja noch woanders im script einen fehler gemacht bei der pagination oder so ich habs hier mal hochgeladen vieleicht kann ja mal jemand reinsehen: dvd_search.php (Das ist das Original ohne das ORDER BY dvd_title)

Vieleicht habe ich das problem oben auch etwas doof beschrieben also die User können über ein Formular nach DVD´s suchen wenn es jetzt für eine suchanfrage z.b. 27 Ergebnisse gibt werden diese durch die Pagination auf 6 seiten mit jeweils 5 ergebnissen verteilt diese ergebnise möchte ich nach dvd_title sortieren dazu habe ich wie gesagt das ORDER BY dvd_title hinzugefügt dann werden weiterhin die ergebnisse auf 6 Seiten aufgeteilt aber es wird nur auf den ersten 5 seiten jeweils 1 Datensatz aufgelistet und auf der 6 garkeine. Hoffe mal das war jetzt etwas verständlicher ausgedrückt :)

Grüße Jason
PhilippK
Vorstand
Vorstand
Beiträge: 14662
Registriert: 13.08.2002 14:10
Wohnort: Stuttgart
Kontaktdaten:

Beitrag von PhilippK »

Was mir gerade so auffällt: du hast die beiden Tabellen ja garnicht verknüpft. Ein JOIN wäre da nicht ganz schlecht...

Gruß, Philipp
Kein Support per PN!
Der Sozialstaat ist [...] eine zivilisatorische Errungenschaft, auf die wir stolz sein können. Aber der Sozialstaat heutiger Prägung hat sich übernommen. Das ist bitter, aber wahr. (Horst Köhler)
Meine Mods
Jason

Beitrag von Jason »

Arghh ich honk :D Hat sich erledigt habs hinbekommen hattest recht mit nem Join gehts :oops:

Danke dir :)

Gruss Jason
Jason

Beitrag von Jason »

Hi,
zurzeit können die User nur nach wörtern oder wortteilen suchen die in dvd titel/beschreibung vorhanden sind aber ich hätte es gerne so das die User auch wildcards benutzen können also wenn sie z.b. nach d*d suchen sollen sowohl titel die dvd enthalten als auch titel die deutschland enthalten ausgegeben werden ist das irgendwie möglich?

Gruss Jason
PhilippK
Vorstand
Vorstand
Beiträge: 14662
Registriert: 13.08.2002 14:10
Wohnort: Stuttgart
Kontaktdaten:

Beitrag von PhilippK »

Schon mal probiert, das Sternchen (*) durch 'nen Prozent-Zeichen (%) zu ersetzen. Für genau ein Zeichen den Unterstich (_) und nicht das Fragezeichen (?) verwenden.

Ach ja: Aufpassen, dass du in dem vom Benutzer eingegebenen String die Anführungszeichen behandelst (entweder escapen oder ganz löschen). Sonst kann der so ziemlich jeden SQL-Befehl auf deiner DB ausführen.

Gruß, Philipp
Kein Support per PN!
Der Sozialstaat ist [...] eine zivilisatorische Errungenschaft, auf die wir stolz sein können. Aber der Sozialstaat heutiger Prägung hat sich übernommen. Das ist bitter, aber wahr. (Horst Köhler)
Meine Mods
Jason

Beitrag von Jason »

Stimmt mit prozent gehts aber den Usern meines Forums wäre es lieber mit nem * gibts da vieleicht ne möglichkeit das wenn sie ein * eingeben das mit % ersetzt wird so wie bei der generellen phpBB Suche?

Code: Alles auswählen

Ach ja: Aufpassen, dass du in dem vom Benutzer eingegebenen String die Anführungszeichen behandelst (entweder escapen oder ganz löschen). Sonst kann der so ziemlich jeden SQL-Befehl auf deiner DB ausführen. 
Wie meinst das? Sorry ich bin noch absolut noob :oops:

Grüße Jason
Benutzeravatar
Pyramide
Ehrenadmin
Beiträge: 12734
Registriert: 19.04.2001 02:00
Wohnort: Meschede

Beitrag von Pyramide »

Jason hat geschrieben:gibts da vieleicht ne möglichkeit das wenn sie ein * eingeben das mit % ersetzt wird?
http://de.php.net/manual/de/function.str-replace.php

Code: Alles auswählen

Ach ja: Aufpassen, dass du in dem vom Benutzer eingegebenen String die Anführungszeichen behandelst (entweder escapen oder ganz löschen). Sonst kann der so ziemlich jeden SQL-Befehl auf deiner DB ausführen. 
Wie meinst das? Sorry ich bin noch absolut noob :oops:
http://de.php.net/manual/de/function.my ... string.php


PS: Ich habe mal eine "SearchToSQL" Funktion geschrieben, die aus Suchanfragen wie (PHP OR Java) + *Forum einen gültigen SQL-WHERE-Befehl generiert: http://mitglied.lycos.de/pyramidenzahn/ ... htosql.txt . Verwendung etwa so:

Code: Alles auswählen

$sql = "SELECT * 
FROM " .DVD_TABLE . ',' .DVD_CAT_TABLE ." 
WHERE " . SearchToSQL($search, array($where)) . "
ORDER BY dvd_title 
LIMIT 0,5;
Der erste Parameter ist der Such-String vom User, der zweite ein Array von Spaltennamen, in denen mit LIKE gesucht wird, der dritte ein Array von Spaltennamen, in denen mit = gesucht wird und der vierte ein array mit Optionen (siehe Quellcode unter //settings). Weglassen kannst du den 4. und entweder 2. oder 3. HTH
Jason

Beitrag von Jason »

Danke Pyramide,
ich werde deine funktion morgen mal ausprobieren ;)

Gruss Jason
Antworten

Zurück zu „Coding & Technik“