WinFuture-Forum.de: MYSQL Sortieren von Texten - eventuell ne Anfängerfrage - WinFuture-Forum.de

Zum Inhalt wechseln

Nachrichten zum Thema: Entwicklung
Seite 1 von 1

MYSQL Sortieren von Texten - eventuell ne Anfängerfrage


#1 Mitglied ist offline   SFFox 

  • Gruppe: aktive Mitglieder
  • Beiträge: 1.338
  • Beigetreten: 19. August 04
  • Reputation: 4
  • Geschlecht:Männlich
  • Wohnort:Bonn

geschrieben 30. September 2011 - 12:28

Heyho,

ich sprech mal allgemein über den Rahmen und mein Problem einen geeigneten Query für MYSQL zu finden:
Ich entwickle gerade an einem Portal herum, wo User Termine mit verschiedenen zugehörigen Parametern einpflegen können (so Sachen wie Datum, Adresse, Kategorien etc). Das funzt auch alles einwandfrei. Als letzten Schritt, nachdem alles fertig war, habe ich mich an eine Suchfunktion gesetzt und nachdem ich mich dann entschieden hatte, welche Felder abgefragt / eingegrenzt werden sollen, hab ich auch das alles sauber hingekriegt. Das einzige an der Suche, was mir noch Probleme bereitet sind diese "Kategorien". Diese haben quasi einen Rang, der aber nicht numerisch in der Datenbank hinterlegt ist. Dort steht quasi direkt der Plaintext der gewählten/eingetragenen Kategorie drinne, da für die Zielgruppe die Rangfolge der Kategorien sowieso klar ist.

Jetzt möchte ich aber in der Suche einen oberen und unteren Rahmen für die Ausgabe der Einträge mit bestimmten Kategorien anzeigen. In Zahlen klar und einfach "WHERE cathegory BETWEEN 3 AND 7" zum Beispiel. "WHERE cathegory BETWEEN 'mittelschwere kategorie' AND 'ultraschwere kategorie'".
Hat jemand ne elegante Lösung für das Problem? Im Zweifel könnte ich noch Zahlen davorsetzen, weil alles noch in der Entwicklung ist und ich damit nicht in einen Produktivbetrieb eingreifen müsste, aber eigentlich würde ich das nur ungerne tun.

Ich lerne gerade durch Anwendung und Praxis und kenn da vllt. ein paar einfache Grundkniffe nicht ;) Thema Sicherheit kommt dann als nächstes nochmal dran, da findet man ja zum Glück einiges zu im Netz ;)

mfg
SFFox :)

Dieser Beitrag wurde von SFFox bearbeitet: 30. September 2011 - 12:32

0

Anzeige



#2 Mitglied ist offline   FenKeN 

  • Gruppe: aktive Mitglieder
  • Beiträge: 220
  • Beigetreten: 22. September 11
  • Reputation: 8
  • Geschlecht:Männlich
  • Wohnort:Erding
  • Interessen:Php, C#, Programmierung

geschrieben 30. September 2011 - 12:36

Zur Sicherheit: Prepared Statements -> PDO ist dabei eine nette integrierte Klasse von PHP.
zu PDO:
Hatte in meinem thread <SQL INJECTIONS> auch ein wenig erklärt, wie sowas zu lösen sei, da ein User nachgefragt hatte.

Zu deinem Problem:
Ich hätte das ganze jetzt leider doch nur mit ner Zahlzuordnung gelöst, wie du eben geschrieben hattest BETWEEN 3 AND 7.
Anders kann ich mir das nicht vorstellen, falls es doch eine möglichkeit gibt, korrigiert mich.
MVC Tutorial
<?php
	echo "Liebe Grüße FenKeN";
?>
0

#3 Mitglied ist offline   SFFox 

  • Gruppe: aktive Mitglieder
  • Beiträge: 1.338
  • Beigetreten: 19. August 04
  • Reputation: 4
  • Geschlecht:Männlich
  • Wohnort:Bonn

geschrieben 30. September 2011 - 12:48

Heyho,

Danke schonmal für die Antwort, Zahlen sind da wohl wirklich am einfachsten, man könnte natürlich auch alle Kombinationen der Kategorieauswahlgrenzen mit "IF" abfangen und immer einen jeweils sehr langen query generieren ;) Ist aber umständlicher als das über Zahlen zu machen denke ich.

Über PDO werde ich mich mal schlau machen, danke :)

mfg
SFFox
0

#4 Mitglied ist offline   FenKeN 

  • Gruppe: aktive Mitglieder
  • Beiträge: 220
  • Beigetreten: 22. September 11
  • Reputation: 8
  • Geschlecht:Männlich
  • Wohnort:Erding
  • Interessen:Php, C#, Programmierung

geschrieben 30. September 2011 - 12:51

Kein Problem.
Das ganze ist auch mit Ifs lösbar ja, Problem dabei nur, das es ein längerer Code werden wird und wie sagt man so schön?
Umsolänger der Code umso mehr Fehler kannst du einbauen und umso schwerer wird es sie zu finden.
Daher lieber kurz halten ;).
MVC Tutorial
<?php
	echo "Liebe Grüße FenKeN";
?>
0

#5 Mitglied ist offline   TO_Webmaster 

  • Gruppe: Moderation
  • Beiträge: 3.212
  • Beigetreten: 27. März 02
  • Reputation: 82
  • Geschlecht:Männlich

geschrieben 30. September 2011 - 13:14

Die Kategorienamen sollten sowieso in einer extra Tabelle stehen, da du sie sonst redundant speicherst. Die Tabelle hat dann erstmal nur die Spalten ID (Primärschlüssel) und Name. Deine ursprüngliche Tabelle hat statt den Namen nur noch einen Fremdschlüssel auf die Kategorie-Tabelle.

Auslesen kannst du die Namen dann mit einem JOIN. Zum Suchen reicht es natürlich, auf die IDs zurückzugreifen.

MfG TO_Webmaster
The old reverend Henry Ward Beecher
called a hen the most elegant creature.
The hen pleased for that,
laid an egg in his hat.
And so did the hen reward Beecher.
0

#6 Mitglied ist offline   SFFox 

  • Gruppe: aktive Mitglieder
  • Beiträge: 1.338
  • Beigetreten: 19. August 04
  • Reputation: 4
  • Geschlecht:Männlich
  • Wohnort:Bonn

geschrieben 30. September 2011 - 14:36

Danke für den Rat, ich hab jetzt ne quick and dirty Lösung wo ich die 4 Werte die es betrifft als Zahl in die DB schreibe und mit einem Array beim Eintragen und beim Auslesen den Text in Zahlen bzw Zahlen in Text zurückwandle. Die Lösung mit der zweiten Tabelle ist natürlich schöner und kostet nicht soviel Performance. Da ich noch nicht weiss, ob mein Projekt Anklang finden wird, wollte ich das jetzt zu sehr umstrukturieren. Wenn ich merke es kostet Platz / Performance, weil die Userzahlen (hoffentlich) steigen, dann setz ich mich da nochmal ran um andere Ansätze zu verwirklichen :)

Durch diese Übergangslösung hab ich jedenfalls schonmal die Zahlen in der einen Tabelle, damit kann ich nachher ne andere Tabelle referenzieren und dort auflösen, ohne dass jetzt die DB unnötig zugemüllt wird.

Ich danke für die Hilfe!

mfg
SFFox :)
0

#7 Mitglied ist offline   Holger_N 

  • Gruppe: aktive Mitglieder
  • Beiträge: 5.111
  • Beigetreten: 11. September 10
  • Reputation: 458
  • Geschlecht:Männlich

geschrieben 30. September 2011 - 15:25

Ich weiß nicht, ob ich das Problem richtig verstanden habe aber wäre nicht "GROUP BY cathegory" dem Kolumbus sein Ei?
Bauernregel: Regnets mächtig im April, passiert irgendwas, was sich auf April reimt.
0

#8 Mitglied ist offline   SFFox 

  • Gruppe: aktive Mitglieder
  • Beiträge: 1.338
  • Beigetreten: 19. August 04
  • Reputation: 4
  • Geschlecht:Männlich
  • Wohnort:Bonn

geschrieben 01. Oktober 2011 - 20:02

Beitrag anzeigenZitat (Holger_N: 30. September 2011 - 15:25)

Ich weiß nicht, ob ich das Problem richtig verstanden habe aber wäre nicht "GROUP BY cathegory" dem Kolumbus sein Ei?

Habs mir im Nachhinein nochmal angeguckt, GROUP BY hilft in dem Fall leider garnicht weiter, stattdessen läuft die oben erwähnte Bastelei mit Arrays die Nummern durch Texte ersetzen sauber durch. Die Nummern lassen sich im Punkt Sicherheit / SQL Injection auch nochmal ein wenig einfacher sauber handhaben ;)

mfg
SFFox
0

#9 Mitglied ist offline   Ludacris 

  • Gruppe: Moderation
  • Beiträge: 4.666
  • Beigetreten: 28. Mai 06
  • Reputation: 218
  • Geschlecht:Männlich

geschrieben 02. Oktober 2011 - 11:31

Ich wüste auch nichts anderes als den Werten einen Nummerischen Wert zu zuweisen da eine Datenbank mit "mittelschwer" und "ultraschwer" nichts anfangen kann. Wenn du aber 1-10 verteilst und dann auf eine weitere Tabelle verweist (stichwort: Fremdschlüssel) dann kommst du - wie eben geschrieben - zum ziel
0

#10 Mitglied ist offline   TO_Webmaster 

  • Gruppe: Moderation
  • Beiträge: 3.212
  • Beigetreten: 27. März 02
  • Reputation: 82
  • Geschlecht:Männlich

geschrieben 02. Oktober 2011 - 11:45

Der Vollständigkeit wegen möchte ich noch ENUMs erwähnen.

MfG TO_Webmaster
The old reverend Henry Ward Beecher
called a hen the most elegant creature.
The hen pleased for that,
laid an egg in his hat.
And so did the hen reward Beecher.
0

Thema verteilen:


Seite 1 von 1

1 Besucher lesen dieses Thema
Mitglieder: 0, Gäste: 1, unsichtbare Mitglieder: 0