• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

MySQL - Daten unbestimmt suchen

Hallo-Welt

Aktives Mitglied
Hallo,
Ich weiß mitlerweilen, wie man Daten in einer bestimmten Kollone sucht und dabei eine bestimmte kollone ausgibt. Aber wie anhand eines Werts eine unbekannte Spalte in einer unbekannten Kollone in einer unbekannten Zeile suchen, und dabei eine bestimmte Zelle in dieser Zeile augeben?
Ich bin bisher so weit wie folgt:
Code:
SELECT spalteEins FROM DBname WHERE (Irgendeine unbekannte Spalte) = '$value' AND spalteEins != '$value' LIMIT 1
Durch was müsste ich dafür das "(Irgendeine unbekannte Spalte)" ersetzen?
 
Werbung:
Werbung:
So, ich hab es jetzt mal weiter versucht:
Code:
SELECT spalte1 FROM DBname WHERE (spalte1 = '$value' OR spalte2 = '$value' OR spalte3 = '$value' OR spalte4 = '$value' OR spalte5 = '$value' etc...........) AND spalte1 != '$value' LIMIT 1
Aber sonderlich elegant ist das so nicht, besonders da hinter spalte5 noch viele weitere kommen. Gibt es denn keine Möglichkeit, einfach eine unbestimmte Spalte bzw. alle Spalten in der Tabelle anzureden, also eine Art 'ANY_ROW' oder sowas?
 
So, ich hab es jetzt mal weiter versucht:
Code:
SELECT spalte1 FROM DBname WHERE (spalte1 = '$value' OR spalte2 = '$value' OR spalte3 = '$value' OR spalte4 = '$value' OR spalte5 = '$value' etc...........) AND spalte1 != '$value' LIMIT 1
Aber sonderlich elegant ist das so nicht, besonders da hinter spalte5 noch viele weitere kommen. Gibt es denn keine Möglichkeit, einfach eine unbestimmte Spalte bzw. alle Spalten in der Tabelle anzureden, also eine Art 'ANY_ROW' oder sowas?

Du könntest theoretisch aus der Datenbank information_schema auslesen, welche Spalten eine Tabelle hat und in einem zweiten Schritt mit PHP daraus eine Query bilden.

In der Praxis ist das jedoch nichts und sollte mit einer normalisierten Struktur auch nicht nötig sein.
Schreib lieber mal was du überhaupt bezwecken willst.
 
Werbung:
Wenn du nicht weisst wo der wert steht ist irgendwas falsch an deinem db modell
Okay, ich werde präziser. :rolleyes:
Ich habe mehrere verschiedene Spalten, welche immer ein und das selbe darstellen (bis auf die erste, die ich ja auslesen möchte), nur, dass sie unterschiedliche Werte enthalten können. Es müssen mehrere Spalten sein, da es voneinander unabhängige Werte sind. Sie müssen ebenfalls in unterschiedlichen Spalte sein, da sie alle voneinander abhängig sind, sie müssen also auch aufeinander bezogen sein (selbe Zeile).

Mein Datenbank-Modell ist mit Sicherheit nicht das Problem, da es nur so Sinn macht (es sei denn, ich würde die Daten in unterschiedliche Tabellen Schreiben, jede Wertegruppe eine, aber das wäre ja noch umständlicher -ich müsste sie alle durchsuchen-, und vor allem unnötig).

Ich will einfach nur eine ganze Tabelle nach einem einzigen Begriff durchsuchen, und dann die dazugehörige (also in der selben Zeile stehende) Spalte, hier im Beispiel, mit dem Namen "spalte1" auslesen. Ich hab schon einen ersten entwurf weiter oben geschrieben, aber der ist absurde lang und kompliziert. Wie also eine ganze Tabelle durchsuchen, statt nur eine Spalte? Das muss doch irgendwie gehen, oder?
 
Zuletzt bearbeitet:
Wir wissen was du vor hast, nur ist es unlogisch und deshalb auch nicht möglich. Du musst deine Datenbankstruktur ändern.
 
Werbung:
Wir wissen was du vor hast, nur ist es unlogisch und deshalb auch nicht möglich. Du musst deine Datenbankstruktur ändern.
Vorweg, möglich ist es anscheinend ja doch, da ich wie in Post #4 beschrieben einen Weg gefunden habe, das auf ganz primitive Art und Weise zu lösen. Ich bin einfach mal davon ausgegangen, MySQL gebe auch eine Möglichkeit mit, eine Tabelle statt Spalte zu durchsuchen. Warum auch nicht, ist doch nur sinnvolle. Warum solll man sowas nicht nutzen dürfen.

Und ich wüsste wirklich nicht meine Datenbankstruktur anders anzulegen. Ich habe mehrere Spalten wo ein gesuchtener Wert vorkommen KANN. Davon möchte ich die damit in Verbindung stehende (heisst: selbe Zeile) Spalte "spalte1" auslesen. Wie sollte ich das anders machen. Ich kann nicht einfach alle Wert in die selbe Spalte schreibgen, das würde die ganze angelegenheit unmöglich machen und die DB zwecksentfremden. Wenn jemand ein Vorschlag hat, wie ich es besser umsetzen kann, lasse ich mich aber gerne belehren.

Am liebsten würde ich aber hören "Nein, die MySQL-Entwickler haben KEIN Brett vorm Kopf und haben daran gedacht, eine elementare Funktion wie die eine Tabelle nach einem Suchbegriff zu durchsuchen in MySQL zu implementieren.", aber ich fürchte, das werde ich wohl nicht mehr zu hören bekommen. Wenn mir jemand dies doch noch posten könnte, wäre ich überglücklich!
 
Vorweg, möglich ist es anscheinend ja doch, da ich wie in Post #4 beschrieben einen Weg gefunden habe, das auf ganz primitive Art und Weise zu lösen.

Nein hast du eben nicht. Du hast einen Weg gefunden, die Spalten abzufragen die du auch kennst und das passt auch so. Nicht jedoch eine unbekannte Anzahl an Spalten mit unbekannten Namen abzufragen. Danach fragst du ja nämlich.

Warum es diese Möglichkeit nicht gibt, weiß ich ehrlich gesagt nicht. Ich kann mir vorstellen, dass erstens die Performance schlecht wäre und zweitens dadurch Sicherheitsprobleme entstehen könnten.

Hier, eine mögliche Struktur:

Tabelle main:
Code:
id
--
1
2
3

Tabelle attributes:
Code:
main_id | value
---------------
1       | asdf
1       | fdsa
1       | asdf
2       | fdsa
2       | asdf

Abfrage:
Code:
SELECT id
FROM main
LEFT JOIN attributes ON (main.id = attributes.main_id)
WHERE attributes.value LIKE "%asd%"
 
Zuletzt bearbeitet:
Nein hast du eben nicht. Du hast einen Weg gefunden, die Spalten abzufragen die du auch kennst und das passt auch so. Nicht jedoch eine unbekannte Anzahl an Spalten mit unbekannten Namen abzufragen. Danach fragst du ja nämlich.
Okay, dann hat ein Missverständnis stattgefunden. Ich kenne die Anzahl an Spalten theoretisch schon und auch deren Namen (ich hab sie ja schließlich benannt). Ich dachte nur, es müsste doch irgendwie möglich sein, die gesammte Tabelle als Einheit zu durchsuchen, statt einfach jede Spalte einzeln zu durchsuchen.
 
Werbung:
Okay, dann hat ein Missverständnis stattgefunden. Ich kenne die Anzahl an Spalten theoretisch schon und auch deren Namen (ich hab sie ja schließlich benannt). Ich dachte nur, es müsste doch irgendwie möglich sein, die gesammte Tabelle als Einheit zu durchsuchen, statt einfach jede Spalte einzeln zu durchsuchen.

Habe meine Antwort aktualisiert.
 
Hab's gesehen. Diese DB-Struktur wäre jedoch wohl weniger geeignet, dann müsste ich zumindest noch eine Spalte einfügen, wo sich der eigentliche Originalspaltenname der Gruppe immer wieder wiederholt und... das wäre mir zu aufwändig. Ich bin halt einfach davon ausgegangen, dass es so eine Funktion gibt, die gesammte Tabelle zu durchsuchen, und dass ich sie wie immer nur nicht kenne.
Na dann feile . Na das kann ja dann heiter werden. Ich danke euch allen trotzdem und bedaure es nochmal zu tiefst, dass ich mich anscheinend so undeutlich ausgesprochen habe.:(

Falls jemandem doch noch ein Weg einfallen sollte, das ganze mit selber DB-Struktur anders zu lösen, wäre ich aber natürlich sehr froh darüber.
 
Hab's gesehen. Diese DB-Struktur wäre jedoch wohl weniger geeignet, dann müsste ich zumindest noch eine Spalte einfügen, wo sich der eigentliche Originalspaltenname der Gruppe immer wieder wiederholt und...

Tabelle main:
Code:
id
--
1
2
3

Tabelle columns:
Code:
id | name
--------------------
1  | Spalte 1
2  | Spalte 2
3  | Spalte 3

Tabelle attributes:
Code:
main_id | column_id | value
----------------------------
1       | 1         | asdf
1       | 2         | fdsa
1       | 3         | asdf
2       | 1         | fdsa
2       | 2         | asdf
 
Werbung:
Code:
SELECT spalte_1 FROM yourtable 
WHERE concat(spalte_2, spalte_3, spalte_4,usw.) LIKE "%suchbegriff%"
AND spalte_1 != "suchbegriff"
 
Zurück
Oben