MySQL: SubSelect in SubSelect Variable durchreichen

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • MySQL: SubSelect in SubSelect Variable durchreichen

    Hallo,

    ich habe ein kleines Problem beim erstellen einer Query. Normalerweise würde ich das ganze über eine SP lösen, leider stehen die in diesem Fall auf einem Shared-Hosting Server nicht zur Verfügung.

    Mein Ansatz:
    Code:
    UPDATE `tableFoo` as `tabUpd` SET `tabUpd`.`category_id` =
    (
    	SELECT `group_id` FROM (
    		SELECT `person_id`, `category_id`, `date_start`
    		FROM `tableFoo` `tabSS`
    		WHERE `tabSS`.`behavior` = 1
    		 AND  `tabSS`.`person_id` = `tabUpd`.`person_id`
    		 AND  `tabSS`.`date_start` < `tabUpd`.`date_start`
    		LIMIT 3
    	) as `subsubSelect`
    	GROUP BY `category_id`
    	ORDER BY COUNT(*) DESC, MAX(`date_start`) DESC
    	LIMIT 1
    )
    WHERE `tabUpd`.`behavior` = 2
    Wenn ich in den subSelect direkt die Werte von `tabUpd`.`person_id` und `tabUpd`.`date_start` eingebe bekomme ich genau das erwartete Ergebnis, allerdings funktioniert das Update nicht, da die Werte zwar vom Update in das SubSelect, aber nicht mehr weiter an das SubSubSelect gereicht werden. Hat jemand eine Idee? Danke schon mal für Eure Zeit das anzusehen!

    Erklärung Szenario: Es gibt Personen (person_id), die Aktionen (zum Zeitpunkt date_start) durchführen. Jede Aktion einer Person ist einer Kategorie (category_id) zugewiesen. Die Teilnahme einer Persion an einer Aktion wird einem Verhalten zugewiesen (behavior).

    Für behavior = 2 muss die category aus der vorhergegangenen category der letzten Aktionen berechnet werden, nach folgenden regeln: Die category ist gleich der vorhergegangenen (letzte) category, es sei denn die beiden categorys davor (2. und 3.-letzte) haben den gleichen Wert, dann gilt dieser.

  • #2
    Hallo,

    bei dem was du vorhast sehe ich zwar noch nicht ganz durch, aber die prinzipielle SQL-Herangehensweise sollte besser so aussehen:

    Code:
    UPDATE t1
    JOIN t2 ON ...
    LEFT JOIN t3 ON ...
    SET
        t1.foo = if(t3.bar, t3.bar, t2.foo_bar),
        t1.bar = t2.foo
    WHERE t3.has_foo AND t1.baz IS NOT NULL
    Gruß,

    Amica
    [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
    Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
    Super, danke!
    [/COLOR]

    Kommentar

    Lädt...
    X