Gero: Alle Datensätze mit einem Wert vergleichen

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

  1. 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

    1. 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

      --
      Bei der intendierten Realisierung der linguistischen Simplifizierung
      des regionalen Idioms resultiert die Evidenz der Opportunität extrem
      apparent, den elaborierten und quantitativ opulenten Usus nicht assi-
      milierter Xenologien konsequent zu eliminieren!
      1. Hi,

        Oder irre ich mich?

        moeglicherweise. Aber machts den Braten fett?

        Gruss,
        Ludger

        1. Hallo Ludger!

          moeglicherweise. Aber machts den Braten fett?

          Nein, aber dann funktionierte das Beispiel von Ilja nicht.

          ℆, ℒacℎgas

          --
          Bei der intendierten Realisierung der linguistischen Simplifizierung
          des regionalen Idioms resultiert die Evidenz der Opportunität extrem
          apparent, den elaborierten und quantitativ opulenten Usus nicht assi-
          milierter Xenologien konsequent zu eliminieren!
          1. 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

      2. 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

  2. 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®

    --
    Als Freiberufler bin ich immer auf der Suche nach Aufträgen: Schulungen, Development. Auch  für seriöse Agenturen.
  3. 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

  4. 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