PDA

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]

Coda
2005-04-30, 21:35:59
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.

Coda
2005-05-01, 11:53:30
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.

Coda
2005-05-01, 12:16:11
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.

Xmas
2005-05-01, 13:58:22
Nach dieser Beschreibung nicht.

Coda
2005-05-01, 14:25:21
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: