Ankündigung

Einklappen
Keine Ankündigung bisher.

LösungsansatzmySQL Abfrage Zahl suchen zwischen X und X

Einklappen

Neue Werbung 2019

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

  • LösungsansatzmySQL Abfrage Zahl suchen zwischen X und X

    Hallo zusammen,

    ich haben in die Datenbank nummerVon & nummerBis eingetragen (Bsp.: 525 - 59.

    Wenn der Anwender jetzt die Zahl 587 suchen, muss ich exakt diesen Eintrag mit meiner Abfrage finden. Ich stehe irgendwie auf dem Schlauch. Habe es mit BERWEEN versucht. Das klappte logischerweise aber leider nicht. Hättet Ihr eine Idee?



  • #2
    BETWEEN klappt. Wenn nicht, dann poste bitte Tabellenstruktur und Testdaten als SQL-Code.

    Kommentar


    • #3
      Zitat von truemaster Beitrag anzeigen
      Habe es mit BERWEEN versucht. Das klappte logischerweise aber leider nicht.
      Logischerweise klappt das. Du muss das nur umgedreht verwenden. $gesuchter_wert BETWEEN von_spalte AND bis_spalte.

      Zitat von truemaster Beitrag anzeigen
      Hättet Ihr eine Idee?
      Alternativ dann klassich mit >= AND =< Vergleich.

      Kommentar


      • #4
        Lösungsansatz mySQL Abfrage
        MOD: Verschoben von PHP-Einsteiger
        The string "()()" is not palindrom but the String "())(" is.

        Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
        PHP.de Wissenssammlung | Kein Support per PN

        Kommentar


        • #5
          Zitat von hellbringer Beitrag anzeigen
          BETWEEN klappt. Wenn nicht, dann poste bitte Tabellenstruktur und Testdaten als SQL-Code.

          in DB


          von bis
          10050 100100 INT
          Suche ich nach 10051 erscheint nichts.



          Code:
          SELECT
          ID,
          mitarbeiterID,
          benutzerID_ausgabe,
          benutzerID_ruecknahme,
          leistungsscheinnummer_von,
          leistungsscheinnummer_bis,
          DATE_FORMAT(erfasst_ausgabe, '%d.%m.%Y - %H:%i') AS erfasst_ausgabe,
          DATE_FORMAT(erfasst_ruecknahme, '%d.%m.%Y - %H:%i') AS erfasst_ruecknahme,
          (SELECT vorname FROM mitarbeiter WHERE ID = mitarbeiterID) AS vorname,
          (SELECT nachname FROM mitarbeiter WHERE ID = mitarbeiterID) AS nachname,
          (SELECT nachname FROM benutzer WHERE ID = benutzerID_ausgabe) AS benutzer_nachname,
          (SELECT nachname FROM benutzer WHERE ID = benutzerID_ruecknahme) AS benutzer_ruecknahme
          FROM mitarbeiterleistungsnachweise WHERE ? BETWEEN leistungsscheinnummer_von AND leistungsscheinnummer_bis ORDER BY erfasst_ausgabe DESC

          Kommentar


          • #6
            Unter Tabellenstruktur verstehen wir hier, dass du ein SQL Dump deiner Datenbank präsentierst, dieses startet immer mit CREATE TABLE...
            Testdaten meinen wir so wie es ist, also nicht 100er Datensätze sonder maximal 10 um dein Problem zu verstehen.

            Aus deinem Startbeitrag geht ja nicht hervor um welches DBMS es sich handelt, dies ist aber wichtig.

            Kommentar


            • #7
              Code:
              CREATE TABLE `mitarbeiterleistungsnachweise` (
                `ID` int(11) NOT NULL,
                `mitarbeiterID` varchar(10) COLLATE utf8_german2_ci NOT NULL,
                `leistungsscheinnummer_von` int(10) NOT NULL,
                `leistungsscheinnummer_bis` int(10) NOT NULL,
                `benutzerID_ausgabe` int(11) NOT NULL,
                `erfasst_ausgabe` datetime NOT NULL,
                `benutzerID_ruecknahme` int(11) NOT NULL,
                `erfasst_ruecknahme` datetime NOT NULL
              ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_german2_ci;

              Code:
              INSERT INTO `mitarbeiterleistungsnachweise` (`ID`, `mitarbeiterID`, `leistungsscheinnummer_von`, `leistungsscheinnummer_bis`, `benutzerID_ausgabe`, `erfasst_ausgabe`, `benutzerID_ruecknahme`, `erfasst_ruecknahme`) VALUES
              (1, '2', 10, 10, 1, '2019-06-04 15:39:48', 1, '2019-06-06 13:30:37'),
              (2, '13', 15, 15, 1, '2019-06-04 15:50:35', 1, '2019-06-06 13:30:38'),
              (3, '63', 500, 525, 1, '2019-06-04 16:05:33', 1, '2019-06-06 13:36:43'),
              (4, '17', 3014376, 14400, 1, '2019-06-04 16:05:51', 1, '2019-06-06 14:52:16'),
              (5, '2', 10050, 100100, 1, '2019-06-05 13:35:58', 1, '2019-06-06 15:22:12'),
              (6, '13', 7000751, 7000775, 1, '2019-06-05 13:42:30', 0, '0000-00-00 00:00:00'),
              (7, '62', 15, 15, 1, '2019-06-05 14:18:13', 0, '0000-00-00 00:00:00');

              Kommentar


              • #8
                Code:
                mysql> SELECT ID, mitarbeiterID, leistungsscheinnummer_von, leistungsscheinnummer_bis
                    -> FROM mitarbeiterleistungsnachweise
                    -> WHERE 10051 BETWEEN leistungsscheinnummer_von AND leistungsscheinnummer_bis;
                +----+---------------+---------------------------+---------------------------+
                | ID | mitarbeiterID | leistungsscheinnummer_von | leistungsscheinnummer_bis |
                +----+---------------+---------------------------+---------------------------+
                |  5 | 2             |                     10050 |                    100100 |
                +----+---------------+---------------------------+---------------------------+
                1 row in set (0.00 sec)
                funktioniert doch

                Kommentar


                • #9
                  Verbesserte Version
                  Code:
                  CREATE TABLE IF NOT EXISTS `mitarbeiterleistungsnachweise` (
                    `ID` int(11) NOT NULL,
                    `mitarbeiterID` varchar(10) NOT NULL,
                    `leistungsscheinnummer_von` int(10) NOT NULL,
                    `leistungsscheinnummer_bis` int(10) NOT NULL,
                    `benutzerID_ausgabe` int(11) NOT NULL,
                    `erfasst_ausgabe` datetime DEFAULT NULL,
                    `benutzerID_ruecknahme` int(11) NOT NULL,
                    `erfasst_ruecknahme` datetime DEFAULT NULL
                  ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
                  Collation utf8_german2_ci solltest du nicht auf die ganze Tabelle anwenden, da es Probleme mit dem Datum gibt. Darüber hinaus ist diese Sortierreihenfolge eh nur bei Eigennamen relevant.

                  Daten wie Datum und Zeitangaben besser immer mit NULL vorbelegen, macht es hinterher leichter bei den Abfragen.

                  Kommentar


                  • #10
                    Vielen Dank Euch allen. Habt mir sehr geholfen.

                    Kommentar

                    Lädt...
                    X