feld weg bei select statement...
marcus
- datenbank
0 Ilja
hi zusammen!
ich hab folgendes statement:
select c.imageid,
abs(255-c.r1) as r1,abs(255-c.g1) as g1,abs(255-c.b1) as b1,
abs(255-c.r2) as r2,abs(255-c.g2) as g2,abs(255-c.b2) as b2,
abs(255-c.r3) as r3,abs(255-c.g3) as g3,abs(255-c.b3) as b3,
abs(255-c.r4) as r4,abs(255-c.g4) as g4,abs(255-c.b4) as b4,
abs(255-c.r5) as r5,abs(255-c.g5) as g5,abs(255-c.b5) as b5,
abs(255-c.r6) as r6,abs(255-c.g6) as g6,abs(255-c.b6) as b6,
abs(255-c.r7) as r7,abs(255-c.g7) as g7,abs(255-c.b7) as b7,
abs(255-c.r8) as r8,abs(255-c.g8) as g8,abs(255-c.b8) as b8,
abs(255-c.r9) as r9,abs(255-c.g9) as g9,abs(255-c.b9) as b9,
(r1+g1+b1) as diff1,
(r2+g2+b2) as diff2,
(r3+g3+b3) as diff3,
(r4+g4+b4) as diff4,
(r5+g5+b5) as diff5,
(r6+g6+b6) as diff6,
(r7+g7+b7) as diff7,
(r8+g8+b8) as diff8,
(r9+g9+b9) as diff9,
(diff1+diff2+diff3+diff4+diff5+diff6+diff7+diff8+diff9) as diffsum
from colortunes c having
(diff1<200 and diff2<200 and diff3<200 and diff4<200 and diff5<200 and diff6<200 and diff7<200 and diff8<200 and diff9<200)
order by diffsum asc limit 100
folgende ausgangsbedingungen:
in einer tabelle (colortunes) stehen für 9 felder die jeweiligen rgb-farbwerte drin (r1,g1,b1,...). jetzt will ich von einem vergleichswert (hier rgb=255,255,255) die datensätze mit dem geringsten farblichen unterschied haben. also berechne ich für alle 9 felder (farben) die differenz zum vergleichswert (abs()...), berechne danach die gesamtdifferenz (diffsum) und sage ihm, dass keiner der 9 farbwerte eine größere abweichung zum gesuchten farbwert (255,255,255) der einzelnen farbtöne als 200 haben soll. und um die besten ähnlichsten ergebnisse zu bekommen, sortiere ich die gesamtabweichung aufsteigend (diffsum asc).
so, die berechnung der 9 differenzen klappt auch prima, die felder diff1-diff9 sind mit den erwarteten ergebnissen gefüllt aber die summe davon (diffsum) wird irgendwie nicht gefüllt :-(
irgendwie kann er mit den bezeichnern an der stelle wohl nichts mehr anfangen :-(
irgendeine idee, wie ich ihm das verklickern kann, dass er da mit den werten weiterrechnet oder wie ich das komplette statement sinnvoll umstellen kann damit es funktioniert?
server: mysql 4.1.10 (wechsel nicht möglich)
vielen dank im voraus!!!
gruß
marcus
yo,
warum benutzt du HAVING, dass letztlich nur bei der verwendung von GROUP BY sinnvoll ist anstelle von WHERE ?
und warum die funktion ABS, der zweite wert in der funktion kann doch nicht größer als 255 sein und somit die subtraktion nicht kleiner 0 werden oder ?
und bei mir gibt er eine fehlermeldung aus, wenn ich versuche einen spalten-aliasnamen in der WHERE Klausel mit einbinde oder zur weiterberechung in einer anderen Spalte bei SELECT mit angebe. aber das könnte auch an meiner version liegen. mein tippe, ersetze doch mal die spalten-alias Namen in der WHERE klausel und der diffsum ausgabe mit den richtigen spaltennamen anstelle der alias-namen.
Ilja