Jetzt Mitglied werden

Kostenlos registrieren und die vielen Vorteile der Webmasterpro-Mitgliedschaft nutzen.

Login für Mitglieder

Forum - Entwicklung

Info: Der Stern signalisiert, dass neue Beiträge vorhanden sind.

Über Webmasterpro.de

Das Portal wird betrieben und entwickelt durch die Team23 Agentur. Die Augsbuger Agentur hat sich auf Community Software und die Entwicklung von Webportalen spezialisiert.

Datenbanken (SQL) - Forum

Derzeit sind Sie als Gast in unserem Forum aktiv. Für das Schreiben registrieren Sie sich bitte. Unser Forum ist eine Austauschplattform für Webworker zum Kommunizieren, Helfen, Informieren und Hilfe finden. Auf der rechten Seiten finden Sie eine Forenübersicht über alle Bereiche des Webmaster-Forums. Unterhalb finden Sie alle aktuellen Themen.

MySQL :: ... WHERE '1' IN (`field`) ...

Link zur Antwort auf "MySQL :: ... WHERE '1' IN (`field`) ..." von Dominik Habichtsberg Dominik Habichtsberg, am Donnerstag den 06.01.2011 um 12:31:33

Guten Morgen zusammen,

ich stehe aktuell vor einem kleinen Rätsel.

In einer Datenbanktabelle habe ich eine Spalte in der id's anderer Datenbankeinträge mit Kommata separiert aufgelistet sind (z.B. 1,5,96).

In 99% der Fälle ist dieses Konstrukt auch genau dieses welches perfekt ist z.B: für explode etc.

Allerdings habe ich nun ausnahmsweise den genau umgekehrten Fall, dass ich eine ID weiß und alle Einträge der Tabelle brauche, wo diese ID in der Liste vorkommt.
Das WHERE '1' IN (`field`) funktioniert allerdings nicht.

Alternativ hätte ich auch diese Variante ...

 
sql
1
SELECT * FROM `table` WHERE CONCAT(',', `field`, ',') LIKE '%,1,%'

... die das Problem in gewisser Hinsicht löst, ich diese jedoch sehr unschön finde.

Hat jemand eine Idee wie ich das ganze ans laufen bekommen kann?

Das ganze sollte Schlussendlich eigtl. so aussehen bzw. nach dieser Logik funktionieren:

 
sql
1
2
3
4
5
6
SELECT t1.*
    FROM `module_event` AS t1
    INNER JOIN `module_event_tag` AS t2
        ON t2.`id` IN (t1.`_friendof_module_event_tag`)

    WHERE t2.`identifier` = 'rock';

Viele Grüße und Frohes Neues nachträglich von meiner Seite,

Dominik


Tobias K.
Beiträge: 150

PN schreiben
Profil ansehen
Homepage besuchen
User ist offline
Link zur Antwort auf "MySQL :: ... WHERE '1' IN (`field`) ..." von Tobias K. Tobias K., am Donnerstag den 06.01.2011 um 12:55:21

Hat jemand eine Idee wie ich das ganze ans laufen bekommen kann?

Ja - normalisiere deine Daten ordentlich und lagere die IDs in eine extra Tabelle aus, mit allem anderen wirst du auf Dauer nicht glücklich werden. Und wenn du unbedingt in der Ausgabe deine mit Komma verketteten IDs haben möchtest, solltest du die mit GROUP_CONCAT wieder zusammenkleben können.

btw: hat es einen tieferen Sinn dass du bei allen Tabellen- und Spaltennamen Backticks verwendest auch wenn es garnicht notwendig wäre?

Gruß,
Tobias

Link zur Antwort auf "MySQL :: ... WHERE '1' IN (`field`) ..." von Dominik Habichtsberg Dominik Habichtsberg, am Donnerstag den 06.01.2011 um 13:16:47
Zitat von: Tobias K.

Hat jemand eine Idee wie ich das ganze ans laufen bekommen kann?

Ja - normalisiere deine Daten ordentlich und lagere die IDs in eine extra Tabelle aus, mit allem anderen wirst du auf Dauer nicht glücklich werden. Und wenn du unbedingt in der Ausgabe deine mit Komma verketteten IDs haben möchtest, solltest du die mit GROUP_CONCAT wieder zusammenkleben können.

btw: hat es einen tieferen Sinn dass du bei allen Tabellen- und Spaltennamen Backticks verwendest auch wenn es garnicht notwendig wäre?

Gruß,
Tobias

Eben genau auf eine Zusatztabelle möchte ich schon gerne verzichten - werde aber vermtl. wohl doch nicht drumherum kommen - falls es nicht doch eine geeignete Lösung gibt.

Das ich die Verwende ist einfach eine Sache der Gewöhnung ;-)