Select A bis K - geht das?
-
- Posts: 34
- Joined: 2002-11-21 23:23
- Location: Solingen
Select A bis K - geht das?
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!
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!
-
- Posts: 532
- Joined: 2002-08-13 12:05
Re: Select A bis K - geht das?
hi sbrinkler 
rtfm as usual. Ich hab' denn mal geschaugt:
Aus http://www.mysql.com/doc/en/String_functions.html:
gudn8
rtfm as usual. Ich hab' denn mal geschaugt:
Aus http://www.mysql.com/doc/en/String_functions.html:
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 ...LEFT(str,len)
Returns the leftmost len characters from the string str:
mysql> SELECT LEFT('foobarbar', 5);
-> 'fooba'
gudn8
-
- Posts: 2138
- Joined: 2002-12-15 00:10
- Location: Bergheim
Re: Select A bis K - geht das?
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.
-
- Posts: 144
- Joined: 2003-03-27 19:18
- Location: Bayerischer Wald
Re: Select A bis K - geht das?
>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%'
>denen "Firma" mit den Anfangsbuchstaben A bis K beginnt
select * from firmen where firmen.name between 'A%' and 'K%'
-
- Posts: 599
- Joined: 2002-08-18 16:41
- Location: Darmstadt
Re: Select A bis K - geht das?
dann bitte auch ein Partial Index..
-
- Posts: 532
- Joined: 2002-08-13 12:05
Re: Select A bis K - geht das?
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
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
-
- Posts: 599
- Joined: 2002-08-18 16:41
- Location: Darmstadt
Re: Select A bis K - geht das?
ARGH, wie soll da noch der Datenbankserver was optimieren??
-
- Posts: 532
- Joined: 2002-08-13 12:05
Re: Select A bis K - geht das?
"Optimieren" - was ist das?Jtb wrote:ARGH, wie soll da noch der Datenbankserver was optimieren??
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]
-
- Posts: 599
- Joined: 2002-08-18 16:41
- Location: Darmstadt
Re: Select A bis K - geht das?
mmh, sowas geht fast schon über RTFM hinaus..
also SQL-Tuning in ein paar Schritten:
Liefert possible_keys NULL, wenn für name kein Index definiert ist..
Siehe auch http://www.mysql.com/doc/en/MySQL_indexes.html:
Also
die verwendete Form von Indices in MySQL sind B-Trees, die AFAIK keine RegExps unterstützen..[/code]
also SQL-Tuning in ein paar Schritten:
Code: Select all
EXPLAIN SELECT *
FROM schueler
WHERE name
BETWEEN 'A%' AND 'K%'
Siehe auch http://www.mysql.com/doc/en/MySQL_indexes.html:
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!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.
Also
Code: Select all
KEY Name (Name(1))
die verwendete Form von Indices in MySQL sind B-Trees, die AFAIK keine RegExps unterstützen..[/code]
-
- Posts: 532
- Joined: 2002-08-13 12:05
Re: Select A bis K - geht das?
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?
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?
-
- Posts: 599
- Joined: 2002-08-18 16:41
- Location: Darmstadt
Re: Select A bis K - geht das?
ja..
RegExp vertragen sich nicht mit Indices..
Aber was von den Programmieren von PHP-Nuke zu halten ist, ist hier ja OFF-Topic..
RegExp vertragen sich nicht mit Indices..
PHPNuke hatte (?) mal ein paar starke Bremser in der Richtung..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;
Aber was von den Programmieren von PHP-Nuke zu halten ist, ist hier ja OFF-Topic..