[PHP/MySQL] Anfangsbuchstaben automatisch erkennen.. [erledigt]

mydoys.de

Well-known member
ID: 84968
L
20 April 2006
2.744
124
Ist so was möglich?

Ich habe viele Begriffe die ich in meiner Datenbank speichern möchte und dann jeden anhand seinen Anfangsbuchstaben zu ordnen möchte..

Da ich diese aber alle erst eintragen muss muss ich bis jetzt immer den Anfangsbuchstaben extra dazu eintragen..

Deswegen meine Frage gibt es eine Möglichkeit das der Anfangsbuchstaben eines Wortes egal wie lang automatisch erkannt wird?

Achso dabei sind auch solche Begriffe : Hose to Bottle Adapter
Da soll er eben das "H" erkennen
 
Versteh nicht genau was du meinst. Du kannst natürlich auf den ersten Buchstaben bei einem String ganz leicht zugreifen

$x="HALLO";
echo $x[0];

-> H wird ausgegeben!

*edit*
ich weiß nciht was du denn genau vor hast?? Du kannt doch die DB auch sortieren lassen, bei ner ausgabe...
 
Versteh nicht genau was du meinst. Du kannst natürlich auf den ersten Buchstaben bei einem String ganz leicht zugreifen

$x="HALLO";
echo $x[0];

-> H wird ausgegeben!

*edit*
ich weiß nciht was du denn genau vor hast?? Du kannt doch die DB auch sortieren lassen, bei ner ausgabe...


das ist schonmal gut..

kann mann das so verwenden?

PHP:
$buchstaben=$_POST[suchwort][0];

weisl das wort übergebe ich viel Forumular
 
PHP:
$buchstaben=$_POST[suchwort][0];

gewöhn dir lieber an, strings in anführungszeichen zu setzen. sonst kommst du in teufels küche. versuchs mal mit error_reporting(E_ALL), dann siehst du, was du damit anrichtest ... korrekt muss es so lauten:

PHP:
$buchstaben=$_POST['suchwort'][0];

oder auch

PHP:
$buchstaben=$_POST["suchwort"][0];

was ausserdem sinn macht wäre ein vorheriges behandeln des strings mit trim(), da du sicher nicht nach versehentlich am anfang stehenden leerzeichen suchen willst oder? also:

PHP:
$_POST['suchwort'] = trim($_POST['suchwort']);
$buchstaben = $_POST['suchwort'][0];
 
gewöhn dir lieber an, strings in anführungszeichen zu setzen. sonst kommst du in teufels küche. versuchs mal mit error_reporting(E_ALL), dann siehst du, was du damit anrichtest ... korrekt muss es so lauten:

PHP:
$buchstaben=$_POST['suchwort'][0];

oder auch

PHP:
$buchstaben=$_POST["suchwort"][0];

was ausserdem sinn macht wäre ein vorheriges behandeln des strings mit trim(), da du sicher nicht nach versehentlich am anfang stehenden leerzeichen suchen willst oder? also:

PHP:
$_POST['suchwort'] = trim($_POST['suchwort']);
$buchstaben = $_POST['suchwort'][0];


Ok danke geändert in :

PHP:
$_POST['suchwort'] = trim($_POST['suchwort']);
$buchstaben = $_POST['suchwort'][0];
 
Und wie siehts mit der Abwehr von SQL Injections aus? Lautet der SQL Befehl ungefähr wie
PHP:
"INSERT .... $buchstaben, ".$POST['suchwort']."....."
? ;)
 
gewöhn dir lieber an, strings in anführungszeichen zu setzen. sonst kommst du in teufels küche. versuchs mal mit error_reporting(E_ALL), dann siehst du, was du damit anrichtest ... korrekt muss es so lauten:

PHP:
$buchstaben=$_POST['suchwort'][0];

[...]

und syntaktisch ganz korrekt
PHP:
$buchstaben=$_POST['suchwort']{0};

zum thema... zu was brauchst du bitte den anfang buchstaben? wenn ich alle begriffe aus der datenbank haben will die mit X anfangen dann mach ich einfach
PHP:
SELECT * FROM table WHERE name LIKE 'X%';
und mit nem index auf der spalte name geht das ratzfatz und um speicher zu sparen kannste den index auch nur auf den ersten buchstaben begrenzen.
 
und syntaktisch ganz korrekt
PHP:
$buchstaben=$_POST['suchwort']{0};
ajo, gar nicht mitbekommen ...

zum thema... zu was brauchst du bitte den anfang buchstaben? wenn ich alle begriffe aus der datenbank haben will die mit X anfangen dann mach ich einfach
PHP:
SELECT * FROM table WHERE name LIKE 'X%';
ja, aber er will ja das X erstmal rausfinden aus den übergebenen daten

... kannste den index auch nur auf den ersten buchstaben begrenzen.
wie macht man das?
 
danke das ihr euch gedanken macht..
Die Lösung welche ich schon gefunden habe ist perfekt und diese verwende ich auch derzeit..
Gegen SQL Injections Schütze ich mich im Script natürlich auch,...
 
cool, danke *rumexperimentier*

ist bei kleinen datenbanken eher uninteressant... da kommt man am ende mit indexen die komplete werten indizieren besser. Da somit unter umständen nicht mal auf die eigentlichen daten zugegrifen werden muss, sondern alles aus dem index ausgelesen werden kann.

und bei großen datenbanken (bzw tabellen) wo du zb 10mio datensätze drin hast kommt es ganz drauf an was du mit dem index bezwecken willst. zb wenn du 10 mio kunden daten hast kann es speicher technisch vorteile bringen wenn du nach und vorname als index nimmst der jeweils nur die ersten 5zeichen indiziert... wenn man vom deutschen durchschnitt ausgeht von 7zeichen für vor und nachnahme sparst du also rein rechnerich 4byte pro datensatz am index ein. (also 40mb) diese 40mb erkaufst du dir aber wiederrum damit das mysql jetzt jedesmal die durch den index gefunden datensätze extra prüfen muss. das ist aber wiederum vernachlässigbar... da erstens mysql nicht cpu lastig ist sondern, io lastig und zweitens da man davon ausgehen kann dass die gefundenen ds weitgehenst die gesuchten sind und somit im schnitt maximal 2% wegfallen werden. sprich du hast also am ende 40mb am index gespart, aber dafür die io zugriffe um durchschnittlich ~2% gesteigert. in wie weit das praktisch sinn macht musst du selbst rausfinden ;) 2% mehr io-zugriffe beim suchen... dafür aber 40mb gespart die definitiv nicht im speicher laden werden, die man nicht mehr backupen muss, die nicht geschreiben werden müssen beim einfügen. also wie gesagt... ist wirklich einsatz abhängig. bei ner tabelle mit 10000 datensätze interessierts mich recht wenig ob ich da jetzt 4 byte pro datensatz spare... die 400kb stören mich nicht.
 
ist bei kleinen datenbanken eher uninteressant...

gut, so grosse datenbanken hab ich eigentlich nicht. ausser bei einer anwendung, wo das vielleicht interessant sein könnte. nämlich bei ner datenbank zur "volltextsuche" in der kompletten website. wenn man alle worte in eine tabelle aufnimmt und die zugehörigen vorkommen speichert, dann wird das gern mal ein paar tausend ecken grösser. da solche anwendungen grottenlahm sind ab einer bestimmten grösse und jedes wort ja nun mehrfach in der tabelle vorkommt (weil kommt ja an mehreren positionen vor), macht es vielleicht sinn, den index auf wenige buchstaben zu beschränken und ein view zu erzeugen und dann die eigentlichen vorkommen in diesem view zu suchen. ob das sinn macht weiss ich noch nicht. muss ich halt mal probieren bei gelegenheit ... ich mach das gern über eine eigene wort-position-tabelle, damit ich nicht in text-fields suchen muss, was ja nun noch lahmer ist.
 
wie immer... entweder mit nem extra query und count(*) oder mit calc_found_rows und dann "SELECT FOUND_ROWS()"