Archiv verlassen und diese Seite im Standarddesign anzeigen : [php] Datenbank nach String durchsuchen
Unfug
2005-04-28, 20:06:47
Hallo,
wie kann ich einen String in einer Datenbank suchen?
Wie man unschwer erkennt versuch ich eine "Suchmaske" zu erstellen für "schon bereitserstellte Datenbankeinträge" (vergleichbar mit Forumsbeiträge)
Expandable
2005-04-30, 10:09:48
Wie genau soll das funktionieren? Hast Du in der Datenbank eine eigene Spalte, in der alle möglichen Strings reingeschrieben werden?
Dann halt SELECT * FROM bla WHERE spalte='string'
Wenn Du aber nur einen Teil aus einem Textfeld der Datenbank auslesen willst, hilft Dir vielleicht
SELECT * FROM bla WHERE textfeld LIKE '%string%' weiter!
Unfug
2005-04-30, 10:40:51
Man könnte sich das an einem NewsCenter voraugen führen.
Struktur: Datum, Text, Überschrift
Jetzt will ich in sämtlichen bisherigen News "suchen" können.
Tipp ich: "Party" ein, sollen sämtliche News Beiträge mit "Party" im Text oder in der Überschrift angezgit werden.
Ich weiss nur nicht wie ich die "Select" mache oder falls keine News da sind, ein False rückgebe
darph
2005-04-30, 11:57:38
Man könnte sich das an einem NewsCenter voraugen führen.
Struktur: Datum, Text, Überschrift
Jetzt will ich in sämtlichen bisherigen News "suchen" können.
Tipp ich: "Party" ein, sollen sämtliche News Beiträge mit "Party" im Text oder in der Überschrift angezgit werden.
Ich weiss nur nicht wie ich die "Select" mache oder falls keine News da sind, ein False rückgebe
€dit: So geht's:
SELEECT * FROM tabelle
WHERE Text LIKE "%suchwort%"
OR Ueberschrift LIKE "%suchwort%";
Baust du dir eine Funktion, die sucht, und wenn ihr Rückgabestring == "" ist, gibst du einen Fehler aus.
Unfug
2005-04-30, 17:32:24
Vielen Dank
clm[k1]
2005-04-30, 21:00:10
Baust du dir eine Funktion, die sucht, und wenn ihr Rückgabestring == "" ist, gibst du einen Fehler aus.
Bitte? :confused:
Wie das? Das Ergebniss einer Datenbankabfrage ist doch kein String, oder hab ich was verpasst?
Das überprüfen muss man anders machen:
$dbRes = mysql_query($query);
if(mysql_num_rows($dbRes) == 0){
echo "Keine Datensätze vorhanden";
}
else {
while($aLine = mysql_fetch_array($dbRes)){
echo $aLine['ueberschrift'];
}
}
just my 2 cent
clm[k1]
mysql_num_rows ist schweinelahm. Lieber "SELECT count(*) FROM table", das ist viel besser.
clm[k1]
2005-04-30, 23:01:30
mysql_num_rows ist schweinelahm. Lieber "SELECT count(*) FROM table", das ist viel besser.
Das mag zwar richtig sein, aber ist in diesem Fall dann doch etwas unangebracht.
Den das würde ja im Falle eines Ergebnisses größer null, eine zweite Abfrage nach sich ziehen - schließlich will man ja die Daten der Suche haben.
Da ist dann halt die Frage, ob zwei Abfragen schneller sind, als eine mit Auswertung durch mysql_num_rows().
Allerdings denke ich, das das in der hier gegebenen Größenordnung keine Rolle spielen wird!
just my 2 cent
clm[k1]
Expandable
2005-05-01, 00:36:47
Ich denke, was darph oben meinte war: Er will ja einen String zurückgeben, wenn eine entsprechende News gefunden wurde (oder ein Array, whatever). Die Funktion gibt also ein entsprechendes Array oder String zurück. Ist dieses leer, so waren eben keine Treffer vorhanden.
darph
2005-05-01, 10:57:02
Ich denke, was darph oben meinte war: Er will ja einen String zurückgeben, wenn eine entsprechende News gefunden wurde (oder ein Array, whatever). Die Funktion gibt also ein entsprechendes Array oder String zurück. Ist dieses leer, so waren eben keine Treffer vorhanden.
Ja... eh... clm hat schon Recht. Die Funktion hätte ein mehrdimensionales Array sein sollen. Datum Titel, Text oder so. Nur halt eben schön aufbereitet.
Den das würde ja im Falle eines Ergebnisses größer null, eine zweite Abfrage nach sich ziehen - schließlich will man ja die Daten der Suche haben.In Ordnung, da hast du recht.
MadMan2k
2005-05-01, 12:06:32
mysql_num_rows ist schweinelahm. Lieber "SELECT count(*) FROM table", das ist viel besser.
hast du dazu benchmarks? mich würde mysql_result vs. mysql_fetch_row interessieren, wenn es nur um eine Zelle geht.
Naja. Wenn man mysql_fetch_row benützt müssen die ganzen Daten die man eigentlich nicht braucht an PHP übertragen. Bei count(*) nur ein Wert.
MadMan2k
2005-05-01, 12:53:25
Naja. Wenn man mysql_fetch_row benützt müssen die ganzen Daten die man eigentlich nicht braucht an PHP übertragen. Bei count(*) nur ein Wert.
ich meinte eher, wie man sich das ergebniss von COUNT(*) holt.
Man hat dann ja ein result mit einer spalte und einer zeile.
Jetzt könnte man mysql_fetch_row() nehmen, was einem ein array mit einem Element zurückliefert oder mysql_result() was direkt den Wert liefert.
Eigentlich würde ich ja mysql_result() nehmen, aber in der php-doc steht:
When working on large result sets, you should consider using one of the functions that fetch an entire row (specified below). As these functions return the contents of multiple cells in one function call, they're MUCH quicker than mysql_result().
und ich frage mich, ob das auch noch bei diesem atomaren result zutrifft.
Nach dieser Beschreibung nicht.
count(*) ist wirklich deutlich schneller, wenn man nur die Anzahl der Zeilen haben will und die Resultate nicht mehr braucht... da ist der Laufzeitunterschied von mysql_result und mysql_fetch_row ziemlich vernachlässigbar.
Außerdem steht da When working on large result sets :rolleyes:
vBulletin®, Copyright ©2000-2025, Jelsoft Enterprises Ltd.