Recherche in Attributen grob fehlerhaft

  • Ich erstelle eine Attribut-Gruppe Shooting mit Attributen (Text, Zahlen, Auswahl):


    • Geschlecht: m/w/unbekannt
    • Kategorie: Portrait/normal/.../unbekannt
    • Rating: (Zahl, 2 Dezimalstellen)
    • nRating: (Zahl, 0 Dezimalstellen)
    • ...


    Eine Shooting-Vorlage 1 besetzt die Einträge vor, um bei riesigen Bilderserien die Attributzuweisung zu erleichtern, z.B.:


    • Geschlecht: weiblich
    • Kategorie: Portrait
    • Rating: 1500 (eine von mir vorgegebene Zahl, mit 2 Dezimalstellen)
    • nRating: 0 (Anzahl der Bewertungen eines Bilds (Zahl, 0 Dezimalstellen))
    • ...


    (Eigene Software nutzt nun diese Datenbankeinträge um Bilder zu bewerten, was mit Imabas nicht gut möglich ist. So erhalten die Bilder nach und nach eine Bewertung; z.B. Rating 1859,39 bei nRating 5 (=5x bewertet).)


    Eine Recherche nach Bildern mit einer Zahl als Attribut gelingt nun nicht, bzw. bietet erstaunliche Auffälligkeiten:


    Recherche-Einstellungen:


    • Attribut nRating 0 bis 5 -> findet nur Bilder mit nRating = 0
    • Attribut nRating 0 bis 0 OR 1 bis 1 OR 2 bis 2 ... 5 bis 5 -> findet nur nRating = 0
    • Attribut nRating 2 bis 3 -> findet NUR nRating 20 bis 29 (! - grosse, aber vielleicht hilfreiche Überraschung!)
    • Attribut Rating 900 bis 1200 -> findet nichts (obwohl vorhanden)
    • Attribut Rating 1100 bis 1200 -> funktioniert! Findet Bilder mit Rating zwischen 1100 und 1200; auch Suche nach 1800-3000 funktioniert.


    Bin mir nicht sicher, welche Auffälligkeiten diese Recherche noch bietet. Sie kommt mir aber buggy vor. Aus Programmierer-Sicht könnte vielleicht ein 0-terminierter String die Ursache sein?!


    Der Guru ist gefragt!


    -Mino
    --
    V 7.2

  • Hallo Mino,


    danke für den Hinweis. Da gibt es tatsächlich ein Problem mit der Abfrage der Zahlenbereiche...


    Hintergrund ist das die Attributdaten als String gespeichert werden und Imabas diese auch als String abfragt: where attrdata >= '4.000' and attrdata <= '6.300' und das ergibt natürlich meistens Müll, ähnlich wie bei der Sortierung von Zahlen als Text: 1, 10, ..., 2, 20, ..., 3, 4, ...


    Habe jetzt in der 8.1 das Problem behoben: where cast(attrdata as decimal) >= 4.000 and cast(attrdata as decimal) <= 6.300

    Damit werden dann die Bereiche korrekt abgefragt. Was mich wunderte das alle Server diese Syntax gleich verstehen :oops:

  • >Hintergrund ist das die Attributdaten als String gespeichert werden


    Da muß man erst mal drauf kommen, wo ja sogar die Attribute als "Zahl" und sogar mit "Anzahl Dezimalstellen" angelegt werden... In MySQL kann man die Daten doch locker als Zahl ablegen, dann dürfte auch die Abfrage ohne CAST wirken.


    Aber ich sehe, ich komme jetzt um ein Update endgültig nicht mehr herum. Was mich aber doch wundert, ist, dass da noch niemand drauf rumgemeckert hat! Arbeitet hier niemand mit Attributen...?!


    Vielen Dank! :-)
    -Mino

  • Da muß man erst mal drauf kommen, wo ja sogar die Attribute als "Zahl" und sogar mit "Anzahl Dezimalstellen" angelegt werden... In MySQL kann man die Daten doch locker als Zahl ablegen, dann dürfte auch die Abfrage ohne CAST wirken.


    Im Prinzip hast du Recht, aber da es nur ein Data-Feld für alle Attributtypen gibt, konvertiert jedes Attribut seine Daten beim Speichern als String und liest diese auch so wieder ein, Zahl > String und String > Zahl oder Datum > String und String > Datum, sonst müsste es für jeden Datentypen ein separates Feld geben...


    Quote

    Aber ich sehe, ich komme jetzt um ein Update endgültig nicht mehr herum.

    Das freut mich :nicken: Auch dein 500x Klicken im Export ist ja behoben...


    Quote

    Was mich aber doch wundert, ist, dass da noch niemand drauf rumgemeckert hat! Arbeitet hier niemand mit Attributen...?!

    Ich denke schon, kenne zumindest mehrere, frage ist nur ob die danach so suchen oder reinweg als lesbares Zusatzfeld verwenden!?