Funktion max() in MySQL
Erwin
- datenbank
hi,
da hab ich z.b. die folgenden keys in einer Tabelle:
10.2
10.1
10.3
Wie kann ich die Funktion max() verwenden, dass mir am Ende der nächsthöhere mögliche Wert von 10.3 ausgegeben wird? (10.4 muss rauskommen...)
Oder muss ich mir da selber was bauen?
Gruss, Rolf
Hallo Rolf
10.2
10.1
10.3
Feldtyp: Zeichenkette oder Zahl?
Wie kann ich die Funktion max() verwenden, dass mir am Ende der nächsthöhere mögliche Wert von 10.3 ausgegeben wird? (10.4 muss rauskommen...)
Wenn Zeichenkette, was ist das Ergebnis von max(), wenn Du z.B. die Werte
1.1
2.1
10.0
in Deiner Spalte hast. Wie "addierst" Du 0.1 zu einem String
Oder muss ich mir da selber was bauen?
Ich denke, das wirst Du wohl tun müssen.
Abschließende Fragen:
Warum verwendest Du nicht zwei Spalten mit Integer?
Denn soweit ich das sehe, haben Vorpunkt- als auch Nachpunktanteil eine eigene Bedeutung?
Dann gibt es auch keine Probleme mit der Berechnung mehr. Und falls Du einen Index auf Deiner Spalte hast, so kannst Du auch einen kombinierten Index auf die beiden Spalten setzen.
Freundliche Grüsse,
Vinzenz
Hallo Vinzenz,
10.2
10.1
10.3Feldtyp: Zeichenkette oder Zahl?
nun, ich hab Zeichenketten... aber die Idee mit 'Zahl' ist gar nicht mal so abwegig !
Wie kann ich die Funktion max() verwenden, dass mir am Ende der nächsthöhere mögliche Wert von 10.3 ausgegeben wird? (10.4 muss rauskommen...)
Wenn Zeichenkette, was ist das Ergebnis von max(), wenn Du z.B. die Werte
1.1
2.1
10.0in Deiner Spalte hast. Wie "addierst" Du 0.1 zu einem String
Oder muss ich mir da selber was bauen?
Ich denke, das wirst Du wohl tun müssen.
Hmm, nja....
Abschließende Fragen:
Warum verwendest Du nicht zwei Spalten mit Integer?
Denn soweit ich das sehe, haben Vorpunkt- als auch Nachpunktanteil eine eigene Bedeutung?
Die Index - Tabelle, named 'idx' sieht so aus
mysql> select * from idx;
+------+----------------------------------------+
| idx | subject |
+------+----------------------------------------+
| 4 | Perlmodule |
| 6 | Datum und Uhrzeit |
| 7.1 | Datentypen/Listen |
| 7.3 | Datentypen/Hashes |
| 4.2 | Perlmodule/HTML |
| 4.4 | Perlmodule/LWP |
| 11 | Pragmas |
| 12.1 | socket/pop3 |
| 12.3 | socket/ftp |
| 4.6 | Perlmodule/Installation |
| 10.1 | CGI/Sicherheit |
| 13 | Spider und Suchmaschinen |
| 5.1 | Sonstiges/Bugs und Funktionsverhalten |
| 1 | Dateien und Verzeichnisse |
| 5 | Sonstiges |
| 4.1 | Perlmodule/Image |
| 7 | Datentypen |
| 7.2 | Datentypen/Strings |
| 9 | Netzwerk |
| 10 | CGI |
| 4.5 | Perlmodule/Text |
| 12 | socket |
| 12.2 | socket/smtp |
+------+----------------------------------------+
23 rows in set (0.11 sec)
---> es gibt Kategorien und Subkategorien, einmal in 'idx' durch einen Punkt getrennt und in 'subject' mit '/'. Und das alles soll scalierbar sein, d.h., es muss möglich sein, beliebig viele Subkategorien anfügen zu können _ohne_ an der Tabelle was ändern zu müssen.
Ziel der ganzen Geschichte ist es, die perlbase http://perlbase.xwolf.de an eine RDBMS anzubinden, derzeit halte ich die Daten dort in Berkeley DB's.
In der Testphase bisher habe ich das Benutzerfrontend komplett fertig, was noch zu tun ist, ist das Frontent zu "Manage Content".
Sonntagsgruss, Rolf (alias Erwin)
Hallo Rolf
Die Index - Tabelle, named 'idx' sieht so aus
+------+----------------------------------------+
| idx | subject |
+------+----------------------------------------+
| 4 | Perlmodule |
| 6 | Datum und Uhrzeit |
| 7.1 | Datentypen/Listen |
| 7.3 | Datentypen/Hashes |
---> es gibt Kategorien und Subkategorien, einmal in 'idx' durch einen Punkt getrennt und in 'subject' mit '/'. Und das alles soll scalierbar sein, d.h., es muss möglich sein, beliebig viele Subkategorien anfügen zu können _ohne_ an der Tabelle was ändern zu müssen.
Tabelle
Kategorien
kat_id
subject
Subkategorien
kat_id
sub_id
subject
Du hast das Problem, eine Hierarchie mit einem relationalen DBMS darzustellen.
Prinzipiell wäre dafür ein hierarchisches DBMS besser geeignet, aber die sind schon ein paar Jahrzehnte ausser Mode ;-)
Du hast zusätzlich Redundanz in Deiner Tabelle:
idx 7 entspricht 'Datentypen'
idx 7.1 entspricht 'Datentypen/Listen'
idx 7.x entspricht 'Datentypen/irgendwas'
Ich bleibe dabei, deine Vorpunkt- und Nachpunktangaben haben jeweils eigene Bedeutung, Du solltest diese getrennt behandeln.
Freundliche Grüsse,
Vinzenz
Moin,
Tabelle
Kategorien
kat_id
subjectSubkategorien
kat_id
sub_id
subject
Das gibts nicht, von einer dritten Tabelle hab ich geträumt heut' nacht ;-)
Aber: sub_id als ein Feld reicht nicht, zur Identifizierung einer Subkategorie muss es 3 Felder geben, sofern diese rein integer sein sollen:
kat_id
sub_layer
sub_id
Du hast das Problem, eine Hierarchie mit einem relationalen DBMS darzustellen.
Wahrscheinlich werde ich an den 2 Tabellen festhalten und wenn's sein muss, meine eigenen Funktionen verwenden die sich anderweitig schon bewährt haben.
Viele Grüße, Rolf
yo,
eine hierachie stellt man oft über eine rekursive tabelle da, wobei man rekursionen eigentlich vermeiden sollte. trotzdem wird es oft angewendet.
id | Verzeichnisname | sortierung | übergeordnete_verzechnis_id
dann brauchst du nur eine tabelle und die tabellenstruktur ist unabhängig davon, wieviele unterverzecihnisse du hast. root verzecihnisee besitzen eben kein übergeordnetets_verzeichnis_id, dessen spalteninhalte sind also NULL und lassen sich somit leicht abfragen. über die spalte sortierung kannst die themen der gleichen ebene beliebig sortieren. aber nicht vergessen, rekursionen sind mit vorsicht zu verwenden.
Ilja
Hi,
eine hierachie stellt man oft über eine rekursive tabelle da, wobei man rekursionen eigentlich vermeiden sollte. trotzdem wird es oft angewendet.
id | Verzeichnisname | sortierung | übergeordnete_verzechnis_id
dann brauchst du nur eine tabelle und die tabellenstruktur ist unabhängig davon, wieviele unterverzecihnisse du hast. root verzecihnisee besitzen eben kein übergeordnetets_verzeichnis_id, dessen spalteninhalte sind also NULL und lassen sich somit leicht abfragen. über die spalte sortierung kannst die themen der gleichen ebene beliebig sortieren. aber nicht vergessen, rekursionen sind mit vorsicht zu verwenden.
Jow, die Idee mit rekursiven Tabs ist auch gut. Aber so wie's aussieht werde ich an der bisherigen DB struktur festhalten
idx
idx subject
content
idx id jubject body ... author indate outdate ...
Den Content aus solch einer DB rauszuholen, übersichtlich zu browsen, mit Volltextsuche - das geht einwandfrei.
Ein bischen "Geficke" gibts mit dem "Manage-Content" beim Ermitteln der nächsthöheren idx.idx weil string Variablen like 10.1.1.1 - aber das hab ich auch schon soweit fertig.
Es ist ja auch keine Schande, denke ich, mal eben eine vielleicht 100 oder 500 zeilige 2-spaltige Tabelle komplett auf einen hash zu lesen, zumal das Management-Script sowieso nur von Wenigen und auch nich sooft wie das öffentliche Frontend aufgerufen wird.
Und Inhaltsverzeichnisse, bzw, Hierarchie's für Dokumentenablagen mit mehr als 500 Zeilen sind eh fragwürdig bzw. eines reDesigns wert. Heißt: evntl. Gedanken zu einer übergeordneten Kategorie, sog. Bereiche...
Später Gruss,
Rolf-Erwin
yo,
Wie kann ich die Funktion max() verwenden, dass mir am Ende der nächsthöhere mögliche Wert von 10.3 ausgegeben wird? (10.4 muss rauskommen...)
nicht max, sondern min()
SELECT min(spalte) FROM tabelle WHERE spalte > 10.3
Ilja
Wie kann ich die Funktion max() verwenden, dass mir am Ende der nächsthöhere mögliche Wert von 10.3 ausgegeben wird? (10.4 muss rauskommen...)
garnicht, den der sql server kann nicht hellsehen.
max liefert den größten der vorhandenen werte.
den nächsthöherer möglichen Wert mußt du dann schon selbst ermitteln.