[SQL allgemein] Buildnummern von bis?

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [SQL allgemein] Buildnummern von bis?

    Hallo,

    ich habe folgende felder in der tabelle:

    MAJ (int)
    MIN (int)
    BLD (int)
    COMP (int)

    darin stehen programm versions nummern also zB:

    4 | 6 | 30 | 100
    5 | 5 | 12 | 1
    5 | 5 | 12 | 99
    6 | 5 | 99 | 1
    6 | 5 | 99 | 70

    ich bräuchte nun ein SQL Statement das mit alle einträge mit nummern von bis liefert. also zb.
    5 | 5 | 12 | 1
    bis
    6 | 5 | 99 | 1

    das wären dann die einträge 2,3,4

    das problem ist das wenn ich die sachen mit AND verknüpfe dann nur die einzelnen felder mit von bis abgefragt werden und nicht die gesammte versionsnummer.

    denn zwischen 5.5...1 und 5.6...1 sind ja zig versionen aber wenn ichs so mache:

    WHERE
    (MAJ >= 5 AND MAJ <=6) AND
    (MIN >= 5 AND MIN <=5) AND
    (BLD >= 12 AND BLD <= 99) AND
    (COMP >= 1 AND COMP <= 1)

    dann würder er nur nummer 2 und 4 finden

    kann mir da jemand weiterhelfen?
    Zuletzt geändert von JOat; 22.10.2007, 21:18.
    the end comes faster than you think - you've already reached it!

  • #2
    Code:
    (COMP >= 1 AND COMP <= 1)
    Warum schränkst du COMP hier ein wenn du eigentlich doch bis 99 willst (Eintrag 3)? Etwas übersichtlicher wird das ganze wenn du BETWEEN benutzt.
    OffTopic:
    Wie wäre es mit vernünftigen Spaltennamen? minor und major (wenn ich richtig rate) sind doch wesentlich verständlicher.
    Die Regeln | rtfm | register_globals | strings | SQL-Injections | [COLOR=silver][[/COLOR][COLOR=royalblue]–[/COLOR][COLOR=silver]][/COLOR]

    Kommentar


    • #3
      Du vergleichst zwar numerisch, aber die Position der Ziffer in der gesamten Zahl berücksichtigst du nicht.

      Einfaches Beispiel:
      Du möchtest alle Versionen von 1.2 bis 2.3 selektieren.
      Mit der Bedingung 1<=maj<=2 && 2<=min<=3 entgeht dir aber die Version 2.1, weil min hier 1 ist.

      Richtiger Ansatz: 12<=(10*maj+min)<=23

      Auf dein Szenario angewendet:
      WHERE $min_version <= (1000*MAJ + 100 * MIN + 10 * BLD + COMP) <= $max_version

      Alternative: Die vier Zahlen zu Strings casten, mit "0," konkatenieren, zur Zahl casten und vergleichen. Das spart evtl. Trouble mit den Wertebereichen.
      Zuletzt geändert von onemorenerd; 22.10.2007, 21:58.

      Kommentar

      Lädt...
      X