Alle Datensätze mit einem Wert vergleichen
Gero
- datenbank
Hallo,
ich habe eine relativ große MySQL-Datenbank. Nun stellt sich für mich folgendes Problem, das ich versuche, hier so genau wie möglich zu beschreiben:
Also, es werden zwei Parameter in einem Array an die Seite übergeben, z.B. so:
Array
(
['x'] => "15"
['y'] => "19"
)
Dann müssen diese beiden Werte jeweils mit allen Werten in der Datenbank verglichen werden. D.h. es muss erst durch eine Rechnung ein temporärer Wert für jeden Eintrag geschaffen werden! Und darin sehe ich das Problem:
Ein Wert in der Datenbank hat jetzt also z.B. als "x" den Wert 20, und "y" 30. Dann soll dieser wiederum mit den übergebenen Werten (s.o.) verglichen werden und wenn der Vergleich erfolgreich ist (z.B. Differenz kleiner als 5), dann soll er aus der DB selektiert werden.
Mein Problem ist also, dass ich quasi bei allen Werten in der Datenbank einen Differenzwert ausrechnen muss. Geht das überhaupt mit MySQL-Mitteln?
Danke, vielleicht habe ich auch ein großes schwarzes Brett vor dem Kopf.
Grüße
Gero
yo,
Dann müssen diese beiden Werte jeweils mit allen Werten in der Datenbank verglichen werden. D.h. es muss erst durch eine Rechnung ein temporärer Wert für jeden Eintrag geschaffen werden! Und darin sehe ich das Problem
das ist kein problem, mysql und andere dbms können sehr wohl berechnungen durchführen. diesen berechneten wert kann man dann einen namen geben, den man weiter verwenden kann. ich will mal dazu ein beispiel angeben, wobei mir noch nicht gan klar ist, welche datensätze du selektieren willst. aber ich versuch es mal, wobei $x und $y die übergebenen werte sind.
SELECT x, y, abs(x - $x) AS temp1, abs(y - $y) AS temp2
FROM tabelle
WHERE temp1 <= 5 AND temp2 <= 5
Ilja
Hallo Ilja!
SELECT x, y, abs(x - $x) AS temp1, abs(y - $y) AS temp2
FROM tabelle
WHERE temp1 <= 5 AND temp2 <= 5
Nö, Aliasnamen dürfen nur in ORDER BY und GROUP BY weiterverwendet
werden. Oder irre ich mich?
℆, ℒacℎgas
Hi,
Oder irre ich mich?
moeglicherweise. Aber machts den Braten fett?
Gruss,
Ludger
Hallo Ludger!
moeglicherweise. Aber machts den Braten fett?
Nein, aber dann funktionierte das Beispiel von Ilja nicht.
℆, ℒacℎgas
Hi,
moeglicherweise. Aber machts den Braten fett?
Nein, aber dann funktionierte das Beispiel von Ilja nicht.
wuerde dann aber ohne Aliase wiederum funktionieren.
Gruss,
Ludger
yo,
Nö, Aliasnamen dürfen nur in ORDER BY und GROUP BY weiterverwendet
werden. Oder irre ich mich?
das ist ein guter hinweis, den ich übersehen habe. aber man kann das sicherlich beheben, indem man dann anstelle des alias-namen eben die ganze berechung in die where klausel mit rein nimmt.
SELECT x, y, abs(x - $x) AS temp1, abs(y - $y) AS temp2
FROM tabelle
WHERE abs(x - $x) <= 5 AND abs(y - $y) <= 5
Ilja
Moin!
Ein Wert in der Datenbank hat jetzt also z.B. als "x" den Wert 20, und "y" 30. Dann soll dieser wiederum mit den übergebenen Werten (s.o.) verglichen werden und wenn der Vergleich erfolgreich ist (z.B. Differenz kleiner als 5), dann soll er aus der DB selektiert werden.
ich nehme mal an, Du machst es von PHP aus.
Wieso sollte ein:
<?php
$sql="SELECT spalte, spalte1
FROM table
WHERE
(spalte_x - ".$array['x'].") < 5
AND
(spalte_y - ".$array['y'].") < 5";
?>
es nicht tun?
MFFG (Mit freundlich- friedfertigem Grinsen)
fastix®
Hallo Gero
ich habe eine relativ große MySQL-Datenbank. Nun stellt sich für mich folgendes Problem, das ich versuche, hier so genau wie möglich zu beschreiben:
leider warst Du dabei nicht erfolgreich. Ich habe Dich nicht verstanden.
Also, es werden zwei Parameter in einem Array an die Seite übergeben, z.B. so:
x = "15"
y = "19"
Vergiß Arrays, hier haben wir ganz einfach zwei Werte. Ob diese in Deiner Anwendung sich in einem Array befinden, dürfte dem SQL-Statement egal sein.
Dann müssen diese beiden Werte jeweils mit allen Werten in der Datenbank verglichen werden. D.h. es muss erst durch eine Rechnung ein temporärer Wert für jeden Eintrag geschaffen werden! Und darin sehe ich das Problem:
Du siehst ein Problem, erklärst es aber nicht.
Hier ist der genaue Algorithmus zur Bestimmung des Ergebnisses erforderlich
Ich vermute nun, dass es zwei Spalten gibt, nennen wir sie
A und B
deren Werte mit den Werten von x und y verglichen werden müssen.
Ein Wert in der Datenbank hat jetzt also z.B. als "x" den Wert 20, und "y" 30. Dann soll dieser wiederum mit den übergebenen Werten (s.o.) verglichen werden und wenn der Vergleich erfolgreich ist (z.B. Differenz kleiner als 5), dann soll er aus der DB selektiert werden.
Wie bitte berechnet sich diese "Differenz"? Ist das (A - x) + (B - y)? Ist es die Summe der Beträge der Abweichungen? Ist es etwas ganz anderes?
Mein Problem ist also, dass ich quasi bei allen Werten in der Datenbank einen Differenzwert ausrechnen muss. Geht das überhaupt mit MySQL-Mitteln?
Die Wahrscheinlichkeit ist sehr hoch, dass man Deine Problematik mit einem SQL-Statement lösen kann. Du musst uns nur Deine Problematik _genau_ schildern.
Am besten mit einem realen Beispiel, mit den richtigen Spaltennamen, mit richtigen Datensätzen und richtigen Werten für x und y.
Freundliche Grüße
Vinzenz
Hallo,
danke euch allen, ich habe das Problem aber schon anders gelöst: Der Fehler lag darin, dass ein Teil zuviel von PHP übernommen wurde. Ich habe jetzt alles in MySQL gelöst und es funktioniert!
Danke
Gruß
Gero