Zum Inhalt springen

Komma Werte in select where Abfrage?

Erstellt am 2. Juli 2010 · 2 Antworten · letzte Antwort am 8. Juli 2010

Tags: Datenbank, Frage

Robman ·

Hallo Forum!

ich habe zu meinem Problem schon ein Thema erstellt. Aber das sieht evtl. zu kompliziert aus und bezieht sich auf tt_products... #99696 Hier noch einmal eine abgespeckte Version.

Ich habe in einem Datenbankfeld zwei id's gespeichert, die durch Komma getrennt sind. Das sieht so aus: 1,2

Diese Zwei will ich "lesbar" machen, um diese für die nächste where Abfrage zu nutzen.

temp.split = CONTENT
temp.split {
  table = daten
  select {
    pidInList = 10
  }
  renderObj = COA
  renderObj {
    stdWrap.outerWrap = |,
    10 = TEXT
    10.field = kommawerte
    10.wrap = |
  }
}
# Ausgabe ist dann: 1,2, (bei noch mehr id's: 1,2,3,4,5 usw.)

# Und nun die zweite Abfrage
temp.machdoch = CONTENT
temp.machdoch {
  table = id_vergleich
  select {
    pidInList = 20
    # Um diese Bedingung geht es!!!
    where = tt_products_distributor.uid',' = temp.split
    # Der where-Klausel soll:
    # 1, = 1, oder 2, = 2, abgleichen
    # nur wie ?
  }
  renderObj = COA
  renderObj {
    # usw...
  }

Hat jemand eine Ahnung wie ich das anstellen kann?

Beste Grüße,
Robman

# Nachtrag
Ich hab eben etwas ähnliches gefunden: "Verschachtelte SQL Abfragen" #96144

Aber dort kommen keine Komma separierten Werte drin vor...

Robman ·

Ich bin schon etwas weiter... Aber immer noch keine Lösung. Ich glaube, es liegt an der Syntax der where-Bedingung. Die Werte aus dem "temp.split." werden wohl nicht referenziert.

temp.achmann = CONTENT
temp.achmann {
	table = tt_products
	select {
		pidInList = 1,2,3
		join = tt_products_distributor ON (tt_products.distributor_uid = tt_products_distributor.uid)
		# where.dataWrap = (temp.split.eins = temp.split.zwei)
		where.dataWrap = (temp.split.eins = '###2###')
		# andwhere.noTrimWrap = (temp.split.eins = temp.mach)
		# andwhere.noTrimWrap = (temp.split.eins = '###2####')
		andWhere {
			data = GPvar:tt_products|product
      wrap = tt_products.uid = |
    }
	}
# usw...

Die Daten aus dem table join sind aus beiden Tabellen abrufbar. Nur die where Klausel klappt nicht.
Alle Versuche eine funktionierende where oder andWhere Bedingung mit den temp.split. zu setzen sind gescheitert 🙁

temp.split.eins - erstellt ein array aus: 1 = ###1####
oder
temp.split.eins - erstellt ein array aus: 1,2 = ###1######2###
oder
temp.split.eins - erstellt ein array aus: 1,2,3 = ###1######2######3###

temp.split.zwei - erstellt ein array aus allem was da ist
1,2,3,4,5 usw. = ###1######2######3######4######5### usw.

Diese lassen sich aber nicht vergleichen. Warum nur??? Ich dachte aus:

where
temp.split.eins = ###1######2###
gleich
temp.split.zwei = ###1######2######3######4######5###
resultiert
###1### = ###1###
###2### = ###2###
oder
###1######2### = ###1######2###

Pustekuchen! Liegt es "NUR" an der Syntax? Oder mach ich einen kompletten Denkfehler???

Gruß,
Robman

Robman ·

Ich erstell mal die Lösungsantwort zu meinem Ego-Chat hier :p ...

Ich hab all das where, split zeugs mal rausgeschmissen und die Sache einfach über eine Zuordnungstabelle (_mm) gemacht. Klappt wunderbar, und die Kopfschmerzen sind auch weg. 😉

Falls aber nochmal jemand vorbeigucken sollte der sich mit 1,2,3 split arrays und das vergleichen der werte in einem join oder in einer where abfrage auskennt würde ich mich freuen.

Gruß, Robman