[MySQL 4.0] Problem mit IN(spalte)

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

  • #16
    Problem ist nur, dass

    '[[:<:]]1[[:>:]]'

    sowohl 1 als auch 11,12, 13... sowei 101, ... findet.

    Kommentar


    • #17
      Hm, nö.

      Grad getestet:

      CREATE TABLE `test` (
      `feld` varchar(255) NOT NULL default ''
      ) TYPE=MyISAM;


      INSERT INTO `test` VALUES ('1,45,7');
      INSERT INTO `test` VALUES ('11,12');
      INSERT INTO `test` VALUES ('13');
      INSERT INTO `test` VALUES ('101');
      INSERT INTO `test` VALUES ('1,5');
      INSERT INTO `test` VALUES ('1');
      INSERT INTO `test` VALUES ('5,1,45');


      SELECT *
      FROM test
      WHERE feld REGEXP '[[:<:]]1[[:>:]]'


      Ergebnis:
      feld
      1,45,7
      5,1,45
      1,5
      1


      MySQL 4.0.18-nt
      Zuletzt geändert von Sebastian W; 31.05.2005, 15:25.
      Grüsse,
      Sebastian


      Profil Flex Freelancer
      Twitter twitter.com/flashhilfe
      Web Flash und Flex Community

      Kommentar


      • #18
        Hasse recht.

        Ich guck grad noch mal...
        EDIT:
        Mein Fehler, hatte einfach kopiert, musste aber für meine "problem-query" ein NOT einfügen. geschwindigkeitstest folgt. bin da ganz zuversichtlich.
        Zuletzt geändert von TobiaZ; 31.05.2005, 15:36.

        Kommentar


        • #19
          *Wartet auf den Geschwindigkeitstest*


          Wer nämlich in der nächsten Zeit genau das gleiche machen müssen, deswegen wäre es schön zu wissen was am schnellsten ist.

          bzw. Wie kann ich das normalisieren?


          Floriam
          PHP Handbuch - MySQL Handbuch - PHP Einsteiger Tutorial - CSS Referenz - Browserunterstützung von CSS

          Kommentar


          • #20
            Wenn die Tabelle wirklich nur gelesen wird, könntest du aus der Spalte auch ein SET machen und mit FIND_IN_SET() rangehen.

            Kommentar


            • #21
              Also meine Tabelle wird nicht nur gelesen sondern auch bearbeitet

              EDIT:
              Um nochmal mein Problem zu erklären (damit mich jemand aufklären kann wie ich das normalisieren könnte):

              Ein Artikel soll in mehrere Kategorien eingeteilt werden können. Die Tabelle mit den Artikeln enthält dann eben die Spalte kategorien und dort sind dann alle Kategorien des Artikels aufgelistet.

              Zuletzt geändert von Floriam; 05.07.2005, 16:17.
              PHP Handbuch - MySQL Handbuch - PHP Einsteiger Tutorial - CSS Referenz - Browserunterstützung von CSS

              Kommentar


              • #22
                Scheint trotzdem die beste Lösung zu sein:

                SELECT * FROM `test` WHERE FIND_IN_SET(1,feld) > 0


                @onemorenerd
                Bei mir klappt das auch mit nem normalen varchar Feld. Scheint auch völlig ok zu sein: http://www.mysql.de/FIND_IN_SET
                Zuletzt geändert von Sebastian W; 05.07.2005, 16:27.
                Grüsse,
                Sebastian


                Profil Flex Freelancer
                Twitter twitter.com/flashhilfe
                Web Flash und Flex Community

                Kommentar


                • #23
                  Re: [MySQL 4.0] Problem mit IN(spalte)

                  Original geschrieben von TobiaZ
                  Folgende Tabelle: (Falls Dump gewünscht, bitte Melden.)
                  id | url | category | forbiddencategories
                  1 | bla.de | 3 | 5,7,9
                  forbiddencategories ist doch hier nicht etwa ein normales textfeld ...?

                  dann könnte die antwort ja nur RTFM(SET) lauten ...
                  I don't believe in rebirth. Actually, I never did in my whole lives.

                  Kommentar


                  • #24
                    Hm? Und dann ein SET Feld mit x tausend Nr. anlegen? Er weis doch vorher nicht wieviele ID erzeugt werden. Oder irre ich mich da?
                    Grüsse,
                    Sebastian


                    Profil Flex Freelancer
                    Twitter twitter.com/flashhilfe
                    Web Flash und Flex Community

                    Kommentar


                    • #25
                      Original geschrieben von Sebastian W
                      Hm? Und dann ein SET Feld mit x tausend Nr. anlegen? Er weis doch vorher nicht wieviele ID erzeugt werden. Oder irre ich mich da?
                      SET kann sowieso nur 64 verschiedene Werte annehmen, oder hat sich da von 3.x auf 4.x was getan? *nachgucken_gehn*

                      EDIT:
                      Nö, scheint immer noch beim alten geblieben zu sein. Wenn ich weiß dass wirklich nie mehr als 64 Kategorien anfallen werden, greif ich auch zu SET, weil deutlich schneller als ein relationaler Aufbau.
                      Zuletzt geändert von Quetschi; 05.07.2005, 16:35.
                      Ihr habt ein Torturial durchgearbeitet, das auf den mysql_-Funktionen aufbaut?
                      Schön - etwas Geschichte kann ja nicht schaden.
                      Aber jetzt seht euch bitte php.net/pdo oder php.net/mysqli bevor ihr beginnt!

                      Kommentar


                      • #26
                        Wahrscheinlich nicht... sollte nur eine Maßlose Übertreibung sein. Meiner Meinung nach geht es wie gesagt mit einem SET Feld nicht.
                        Grüsse,
                        Sebastian


                        Profil Flex Freelancer
                        Twitter twitter.com/flashhilfe
                        Web Flash und Flex Community

                        Kommentar


                        • #27
                          Original geschrieben von Sebastian W
                          Wahrscheinlich nicht... sollte nur eine Maßlose Übertreibung sein. Meiner Meinung nach geht es wie gesagt mit einem SET Feld nicht.
                          Um 17.14 hast noch gepostet dass es mit FIND_IN_SET() am besten ginge.
                          Ihr habt ein Torturial durchgearbeitet, das auf den mysql_-Funktionen aufbaut?
                          Schön - etwas Geschichte kann ja nicht schaden.
                          Aber jetzt seht euch bitte php.net/pdo oder php.net/mysqli bevor ihr beginnt!

                          Kommentar


                          • #28
                            Das Attribut heißt doch forbiddencategories ... wieviele Kategorien hast du denn? Mehr als 64?

                            Bis 97 Kategorien würde es noch mit Varchar gehen, wenn FIND_IN_SET() tatsächlich damit klarkommt (habs noch nie probiert).

                            Kommentar


                            • #29
                              Hm, will mich keiner verstehen?

                              -----
                              Scheint trotzdem die beste Lösung zu sein:

                              SELECT * FROM `test` WHERE FIND_IN_SET(1,feld) > 0


                              @onemorenerd
                              Bei mir klappt das auch mit nem normalen varchar Feld. Scheint auch völlig ok zu sein: http://www.mysql.de/FIND_IN_SET
                              -----
                              Meiner Meinung nach geht es wie gesagt mit einem SET Feld nicht.
                              -----

                              ... jetzt aber, oder?
                              Grüsse,
                              Sebastian


                              Profil Flex Freelancer
                              Twitter twitter.com/flashhilfe
                              Web Flash und Flex Community

                              Kommentar


                              • #30
                                Nö, scheinbar ist der Feierabend heute schon zu nah.
                                Ihr habt ein Torturial durchgearbeitet, das auf den mysql_-Funktionen aufbaut?
                                Schön - etwas Geschichte kann ja nicht schaden.
                                Aber jetzt seht euch bitte php.net/pdo oder php.net/mysqli bevor ihr beginnt!

                                Kommentar

                                Lädt...
                                X