Wildcard MYSql-Abfrage über alle Spalten
Frank der 2te
- datenbank
0 Ilja0 Frank der 2te0 Ilja0 Frank der 2te0 wahsaga0 Ilja0 Danke
Frank der 2te
0 chris_the_[$i]
Hi,
Wie kann ich eine MYSQL-Abfrage gestalten, wenn ich nicht weiss, ich welcher Spalte sich der Wert befindet?
Muss ich das über Feld1= $Begriff OR Feld2 = $Begriff OR Feld3= ... o(
oder kann ich da irgendein Wildcard nehmen?
Abfragen ala: WHERE * = $Begriff / \* = $Begriff / etc.
bringen mir leider nur Fehlermeldungen ...
Ist das eine MYSQL-Beschränkung,
dass man Spalten gefällist zu indizieren hat und dann gezielt die Spalte anspricht?
Da lässt sich jedes Textfile ja besser auslesen ...
HIIILFE und Danke schonmal
yo,
oder kann ich da irgendein Wildcard nehmen?
nein, so etwas ist mir nicht bekannt und macht auch nicht wirklich sinn.
dass man Spalten gefällist zu indizieren hat und dann gezielt die Spalte anspricht?
nicht jede spalte muss indiziert werden und das sollte man auch nicht. normalerweie ist eine spalte ein attribut einer entität. insofern sehe ich noch nicht ganz den zweck, etwas über alle spalten suchen zu wollen.
Da lässt sich jedes Textfile ja besser auslesen ...
na den....
Ilja
Hi Ilja,
also muss ich quasi alle $Begriffe noch mal mit der zugehörigen ID
in eine 2te Tabelle bringen, und die dann nach $Begriffe indexieren,
um die Datensätze schnell zu finden?
Gewht das nicht anders / besser ?o(
Gruss, Frank
yo,
also muss ich quasi alle $Begriffe noch mal mit der zugehörigen ID
in eine 2te Tabelle bringen, und die dann nach $Begriffe indexieren,
um die Datensätze schnell zu finden?
sag doch erst einmal, wie deine tabellen aussehen und was für eine query du machen willst. so haben wir wenig einblick, uns fehlen ein paar infos.
Ilja
Hi Ilja,
na germne doch, obwohl das eigentlich 'ne grundsätzlicvhe Frage ist ...
ggf. so:
SELECT Feld1, Feld2, Count(Feld1) FROM MyTable WHERE * = "Suchbegriff" GROUP BY Feld2 ORDER BY Feld1, Feld2 ASC
Nee, es geht wirklich um den Grundsatz:
Wie finde ich einen Wert, wenn ich nicht weiss, in welcher Spalte er sich befindet?
MUSS ich da mit Abfragen wie OR (bzw. einer foreach oder While-Schleife)
jedes einzelne Feld duchgucken,
oder geht das auch bequemer?
Gruss, Achim
hi,
Nee, es geht wirklich um den Grundsatz:
Wie finde ich einen Wert, wenn ich nicht weiss, in welcher Spalte er sich befindet?MUSS ich da mit Abfragen wie OR (bzw. einer foreach oder While-Schleife)
jedes einzelne Feld duchgucken,
ja, eigentlich schon.
oder geht das auch bequemer?
je nachdem, welche daten du durchsuchen möchtest, könnte ja vielleicht auch eine volltext-suche angebracht sein - http://dev.mysql.com/doc/mysql/de/Fulltext_Search.html.
gruß,
wahsaga
yo,
SELECT
Feld1,Feld2, Count(Feld1) FROMMyTableWHERE * = "Suchbegriff" GROUP BYFeld2ORDER BYFeld1,Feld2ASC
uhhmm gefährliche abfrage, um nicht zu sagen falsch. abe da es sowieso mehr um das grundsätzliche geht, lassen wir das mal aussen vor.
Wie finde ich einen Wert, wenn ich nicht weiss, in welcher Spalte er sich befindet?
dieser fall sollte eigentlich nie eintreten, wenn du derjenige bist, der abfragen entwickelt. du solltest eigentlich immer wissen, welchen art von daten in welcher spalte sind. ansonsten würde ich mal das daten-design überdenken.
aber sag doch mal ein konkretes beispiel, wann du nicht weisst, welcher wert in welcher spalte ist ?
Ilja
Danke 1 für ja, eigentlich schon.
Danke 2 für je nachdem ...
Ich werd' mal ein bischen mit FULLTEXT Idexierung und MATCH AGAINST rumspielen ...
Ein konkretes Beispiel wäre:
Feld1 | Feld2 | Feld3 | etc.
Zitrone|VitaminC|sauer|gelb ...
Apfel | sauer | herbe | gruen ...
Ich hab' 'ne Anzeige: die Zitrone ist gelb, sauer und reich an VitaminC
und ein Klick auf "sauer" soll 'ne Abfrage starten, was denn noch alles sauer ist.
JaJa ... am Besten alle Sauer-Attribute in die gleiche Spalte ...
Ich weiss wohl ... aber so saubere Daten kriege bei dem Haufen leider nicht.
Da kann das "sauer" auch mal in einer anderen Spalte stehen ...
Ausserdem:
Bei technischem Zubehör kann es z.B. auch mal sein, dass dasselbe Produkt (dieselbe ID)
sowohl für Vorderraeder, als auch für Hinterraeder einsetzbar ist.
Deswegen am Liebsten komplett über alle Spalten suchen,
in welcher Zeile es denn vorkommt.
Beste Grüsse, Frank
Hallo,
Wie kann ich eine MYSQL-Abfrage gestalten, wenn ich nicht weiss, ich welcher Spalte sich der Wert befindet?
sorry, aber wenn Du das nicht weißt, hast Du was falsch gemacht!
greetz
Chris
Sorry, dass ich mich erst seit heute mit MYSQL beschäftige
und mich gerade durch dev.mysql.com/doc/mysql/de/index.html quäle.
Echt 1000x Sorry, dass ich mich traue, 'ne Anfängerfrage zu stellen!
Hallo Frank,
Sorry, dass ich mich erst seit heute mit MYSQL beschäftige
Schreibe es in Dein Ausgangsposting und wir wissen es auch.
Aller Anfang ist schwer, das gilt auch und gerade für relationale
Datenbanken und für Datenbankmanagementsysteme. Dafür, dass Du
angefangen hast, brauchst Du Dich nicht zu entschuldigen.
und mich gerade durch dev.mysql.com/doc/mysql/de/index.html quäle.
Das ist ein guter Anfang. Du solltest nach der Installation das
Tutorial durcharbeiten. Dennoch ersparen Dir weder das Handbuch
im Allgemeinen noch das Tutorial im Speziellen das Aneignen von
etwas Theorie zu relationalen Datenbanken.
Echt 1000x Sorry, dass ich mich traue, 'ne Anfängerfrage zu stellen!
Hmm, nicht jeder merkt bei jeder Frage eines Anfängers, dass es
sich um eine Anfängerfrage handelt :-)
Zu Deinem Ausgangsposting:
Ist das eine MYSQL-Beschränkung, dass man Spalten gefällist zu
indizieren hat und dann gezielt die Spalte anspricht?
Wie Ilja bereits geschrieben hat, ist es weder notwendig noch
sinnvoll _jede_ Spalte zu indizieren. Selbstverständlich spricht
man bei relationalen Datenbanken in den meisten Fällen genau die
Spalten an, die man benötigt und läßt die weg, die man nicht
braucht.
Da lässt sich jedes Textfile ja besser auslesen ...
Klar finde ich mit "grep" wunderbar das Vorkommen bestimmter
Textpassagen :-)
Viele relationale Datenbankmanagementsysteme verfügen über eine
Volltextsuche. Für diese erstellt man selbstverständlich nur für
solche Spalten Volltextindizes, für die dies sinnvoll ist.
Beispiel:
Ein Volltextindex für eine Spalte mit Text ist sinnvoll.
Ein Volltextindex für eine Spalte mit Datumsangaben ist nicht sinnvoll.
Im übrigen ist es nicht sinnvoll, eine Datenbank einzusetzen, nur
weil eine Datenbank zur Verfügung steht, wenn das zu lösende
Problem einfacher mit Textdateien zu lösen ist. Du kennst die
Redewendung "Mit Kanonen auf Spatzen schießen"?
Freundliche Grüsse,
Vinzenz
Hi Vinzenz,
Danke, aber die Kiste ist schon ein klein wenig zu gross für ein Textfile.
Es geht im konkreten Fall um eine Rückverfolgung,
für welche (Bsp. Autotypen) ein Produkt verwendet werden kann.
Also auf dem screeen hab' ich das Produkt in der Detailansicht.
Jetzt möchte ich per Klick wissen, wo ich das alles verbasteln kann,
und durchsuche dafür 'ne db die aussieht wie:
ID|Hersteller| TYP | Bremse Vorderrad | Bremse hinterrad |
1 |VW | Käfer | STD01FGHDFR | STD01HFDSER | ...
Klar, am besten STD01FGHDFR noch auslagern, dass hier in der db nur 'ne ID wie 112 oder so steht.
Das kriege ich mit dem Produktwust und den Mitarbeitern aber nicht hin.
Aber ich komm wohl nicht umhin, eine 2te Tabelle zu erstellen,
in die ich nach jeder Aktualisierung die Produkt-IDs nebst db-IDs schreiben lasse.
Beste Grüsse, Frank
yo,
Klar, am besten STD01FGHDFR noch auslagern, dass hier in der db nur 'ne ID wie 112 oder so steht.
Das kriege ich mit dem Produktwust und den Mitarbeitern aber nicht hin.
ich denke mal, es lohnt sich zeit und energie in das daten-design zu stecken, bevor du die datenbank mit daten füllst. änderungen am design im laufendem betrieb können sehr unangenehm sein. wenn du fragen zum design hast, hier wird ihnen geholfen....
Ilja
Hallo Ilja,
ich denke mal, es lohnt sich zeit und energie in das daten-design zu stecken, bevor du die datenbank mit daten füllst. änderungen am design im laufendem betrieb können sehr unangenehm sein.
Auch bei korrektem Design der Datenbank und richtiger Datenmodellierung ist der Import vorhandener Daten oftmals ein Kunststück, bzw. ein eigenes Projekt.
@Frank: Bremse_Vorderrad und Bremse_Hinterrad sind z.B. keine eigenen Spalten, sondern Datensätze in einer eigenen Tabelle. Wenn sich die Automobilhersteller ein neues Teil einfallen lassen, musst Du keine neue Spalte einfügen (d.h. Dein Datenbankdesign ändern), sondern nur einen weiteren Eintrag in einer vorhandenen Tabelle vornehmen.
Vielleicht verstehst Du jetzt etwas besser, wie man vorhandene Daten auf Tabellen aufteilt.
wenn du fragen zum design hast, hier wird ihnen geholfen....
So isset.
Freundliche Grüsse,
Vinzenz