brauche SQL Hilfe

Hi,
ich möchte Maps abspeichern, in denen ein Bereiche von Double-Werten auf Integer-Werte gemappt werden. Zudem müssen die Bereiche innerhalb einer Map aneinander anschließend sein (aufs Zentel genau):

Mapping1:
Bereich 0.0 - 5.6 => Wert 6
Bereich 5.7 - 9.9 => Wert 11

Wobei dieses Mapping nicht zulässig wäre:

Mapping2:
Bereich 0.0 - 5.5 => Wert 6
Bereich 5.7 - 9.9 => Wert 11

weil 5.5 und 5.7 nicht aneinander anschließend. Abgesehen davon darf natürlich auch kein Wert 2 Mal gemappt werden wie hier:

Mapping3:
Bereich 0.0 - 5.6 => Wert 6
Bereich 5.6 - 9.9 => Wert 11

5.6 würde hier auf 6 und 11 gemappt werden.

Hat jemand ne Idee wie man das gut in MySQL abbilden kann?

mfg
serow
 
Hallo,
könntest du das mal konkretisieren.

Liegen die Werte in Variablen vor? Oder in Tabellen?

Willst du die an eine Funktion übergeben?
Was soll die dann machen? Die Werte konvertieren oder (konvertiert)speichern?

Willst du nur ein Double-Wert in ein Interger-Wert konvertieren?

Fragen über Fragen.
 
Ich hab mir dabei eine Tablle vorgestellt, die etwa so aussieht:
Code:
START | END | VALUE
      |     |          
      |     |          
      |     |

wobei START = double, END = double, VALUE = int.

Mir gehts darum, ob man in SQL selber checken kann ob die "ranges" aneinanderhängend sind.

Die Werte werden dann später aus einem Java-Programm aus per Hibernate geholt und in ein entsprechendes Objekt verwandelt, das so aussieht:
Code:
/*
 * PresettingMap.java
 *
 * Created on May 30, 2007, 10:43 AM
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */

package de.jagdfalke.albatros.core.course;

import de.jagdfalke.albatros.core.util.HCPRange;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;

/**
 *
 * @author mathias
 */
public class PresettingMap {
    
    private Long id;
    private Map<HCPRange, Integer> map;
    
    /** Creates a new instance of HCPMap */
    public PresettingMap() {
        setId(null);
        setMapping(new HashMap<HCPRange, Integer>());
    }
        
    public Long getId() {
        return id;
    }
    
    private void setId(Long id) {
        this.id = id;
    }
    
    
    private Map<HCPRange, Integer> getMapping() {
        return map;
    }
    private void setMapping(Map<HCPRange, Integer> mapping) {
        this.map = map;
    }    

    
    public int getPresetting(double handicap) {
        Set<HCPRange> keySet = map.keySet();
        for(HCPRange range: keySet) {
            if(range.contains(handicap)) {
                return map.get(range);
            }
        }
        return (int)Math.round(handicap);
    }

}

Die Hilfs-Klasse für den Werte-Bereich ist das hier:

Code:
package de.jagdfalke.albatros.core.util;

/*
 * HCPRange.java
 *
 * Created on May 30, 2007, 10:43 AM
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */

public class HCPRange { 
    
    private double from, to;

    public HCPRange() {
        setFrom(0.0d);
        setTo(-54d);
    }
    
    public double getFrom() {
        return from;
    }
    public void setFrom(double hcp) {
        this.from = hcp;
    }
    
    public double getTo() {
        return to;
    }
    public void setTo(double hcp) {
        this.to = to;
    }

    
    public boolean contains(double hcp) {
        return (hcp >= getFrom() && hcp <= getTo());
    }
    public boolean intersects(HCPRange range) {
        if(range.getFrom() <= getTo() || range.getTo() >= getFrom()) {
            return true;
        }
        return false;
    }
    public boolean isSubsequent(HCPRange range) {
        return ((getTo()+0.1d)==range.getFrom());
    }

}

Die Frage ist, wie bilde ich diese Datenstruktur in MySQL ab und gewärhleiste dazu die "Zusammnhängigkeit" der HCPRanges!

Jetzt klarer?
 
So ganz kann ich dir zwar noch nicht folgen, aber ich versuchs mal so.

Nehmen wir mal folgendes an:
In Var1 liegt der Startwert von Bereich 1.
In Var2 liegt der Endwert von Bereich 1.
In Var3 liegt der Startwert von Bereich 2.
In Var4 liegt der Endwert von Bereich 2.

Zudem müssen die Bereiche innerhalb einer Map aneinander anschließend sein (aufs Zentel genau)

weil 5.5 und 5.7 nicht aneinander anschließend. Abgesehen davon darf natürlich auch kein Wert 2 Mal gemappt werden wie hier:

Demnach könnte man doch einfach prüfen, ob Var2 + 0.1 = Var3 ist. Somit würden die Bereiche aufs zehntel genau aneinander grenzen und eine Überlappung wäre auch ausgeschlossen.

Oder bin ich noch auf dem Holzweg?
 
Zurück
Oben