Page 1 of 1
Select A bis K - geht das?
Posted: 2003-04-08 22:38
by sbrinkmann
Hallo!
Folgendes Problem: Ich habe eine MySQL Datenbank mit mehreren hundert Firmeneinträgen. Wenn ich die alle auf einer Seite ausgebe, wird die Seite zu "schwer" und daher würde ich das nun gerne auf mehrere Seiten verteilen. Jetzt kann ich hingehen und die Anzahl durchzählen und dann halbieren und die Daten verteilen. Dann muss ich aber eine "zurück"-"weiter"-Navigation einbauen, die nicht wirklich schön ist. Ich würde viel lieber eine Aufspaltung der Art "Firmen von A - K" und Firmen von "L - R" und "S-Z" machen. Dort wie sieht ein select aus, dass mir nur die Einträge gibt, bei denen "Firma" mit den Anfangsbuchstaben A bis K beginnt? Geht sowas überhaupt, muss ich für jeden Buchstaben einzeln abfragen oder wie mache ich sowas?
Vielen Dank!
Re: Select A bis K - geht das?
Posted: 2003-04-08 23:54
by dea
hi sbrinkler ;)
rtfm as usual. Ich hab' denn mal geschaugt:
Aus
http://www.mysql.com/doc/en/String_functions.html:
LEFT(str,len)
Returns the leftmost len characters from the string str:
mysql> SELECT LEFT('foobarbar', 5);
-> 'fooba'
Und besser noch:
http://www.mysql.com/doc/en/String_comp ... tions.html recht weit unten "MATCH () AGAINST ()" Ich denke, das ist es noch am ehesten. Vor allem spart es DIr vetl. die WHERE-Clause ... ;)
gudn8
Re: Select A bis K - geht das?
Posted: 2003-04-09 16:02
by oxygen
Ich benutzte für sowas LIMIT. Dann wird halt z.B. angezeigt, Einträge von 0-50, 50-100, 100-150 etc. Das garantiert das die Seiten gleich lang sind.
Re: Select A bis K - geht das?
Posted: 2003-04-09 16:08
by cye
>wie sieht ein select aus, dass mir nur die Einträge gibt, bei
>denen "Firma" mit den Anfangsbuchstaben A bis K beginnt
select * from firmen where firmen.name between 'A%' and 'K%'
Re: Select A bis K - geht das?
Posted: 2003-04-09 16:22
by jtb
dann bitte auch ein Partial Index..
Re: Select A bis K - geht das?
Posted: 2003-04-09 16:23
by dea
Hab' noch mal geschmökert, Ergebnis:
SELECT a.name
FROM tabelle AS a
WHERE a.name REGEXP "^[a-k]"
ORDER BY a.name ASC;
Noch viel einfacher, war vorhin noch nicht sooo wach ;)
Re: Select A bis K - geht das?
Posted: 2003-04-09 16:30
by jtb
ARGH, wie soll da noch der Datenbankserver was optimieren??
Re: Select A bis K - geht das?
Posted: 2003-04-09 17:11
by dea
Jtb wrote:ARGH, wie soll da noch der Datenbankserver was optimieren??
"Optimieren" - was ist das? ;) *fg*
Im Ernst - ich bin kein DB-Profi. Außer ein bischen SQL-Wissen hab' ich (noch) keine Ahnung ... Aber erklär' doch mal, mich interessiert was Du mit optimieren meinst :)
[edit]
Ach so, rtfm kann ich noch ...

[/edit]
Re: Select A bis K - geht das?
Posted: 2003-04-09 17:27
by jtb
mmh, sowas geht fast schon über RTFM hinaus..
also SQL-Tuning in ein paar Schritten:
Code: Select all
EXPLAIN SELECT *
FROM schueler
WHERE name
BETWEEN 'A%' AND 'K%'
Liefert possible_keys NULL, wenn für name kein Index definiert ist..
Siehe auch
http://www.mysql.com/doc/en/MySQL_indexes.html:
Indexes are used to find rows with a specific value of one column fast. Without an index MySQL has to start with the first record and then read through the whole table until it finds the relevant rows. The bigger the table, the more this costs. If the table has an index for the columns in question, MySQL can quickly get a position to seek to in the middle of the datafile without having to look at all the data.
Diesselbe Query liefert possible_keys name, wenn du einen Index auf name legst.. Falls du ansonsten keinen Index auf name brauchst, solltest du die Länge des Index auf das benötigte Miniumum setzen!
Also
die verwendete Form von Indices in MySQL sind B-Trees, die AFAIK keine RegExps unterstützen..[/code]
Re: Select A bis K - geht das?
Posted: 2003-04-09 18:16
by dea
Danke, ist ja sehr interessant :) Ich kannte wohl das Prinzip der Inidzes, aber dass die Art des Index auch Auswirkungen auf die Such- und Abfragemethoden hat/haben kann wusste ich nicht.
Leider schweigt sich die MySQL-Doku (zumindest auf die Schnelle) über diese Themen aus. :/
Bedeutet das jetzt also, dass ich mit herkömmlichen WHERE-Statements performanter unterwegs bin als mit "eingebauten" Funktionen wie etwa REGEXP?
Re: Select A bis K - geht das?
Posted: 2003-04-09 18:19
by jtb
ja..
RegExp vertragen sich nicht mit Indices..
The following SELECT statements will not use indexes:
mysql> SELECT * FROM tbl_name WHERE key_col LIKE "%Patrick%";
mysql> SELECT * FROM tbl_name WHERE key_col LIKE other_col;
PHPNuke hatte (?) mal ein paar starke Bremser in der Richtung..
Aber was von den Programmieren von PHP-Nuke zu halten ist, ist hier ja OFF-Topic..