MYSQL Spaltentypen

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

  • #16
    @ChristianM: er will SQL-seitig die Daten aufbereiten. Nützt ja nicht wenn man alles ins PHP schaufeln und die Server in die Knie zwingt. Die Regel beim Arbeiten mit Datenbank lautet immer noch: "soviel wie nötig und so wenig wie möglich" sollst du deine Query aufbauen.

    Kommentar


    • #17
      Original geschrieben von asp2php
      "soviel wie nötig und so wenig wie möglich" sollst du deine Query aufbauen.
      ebend ... trotzdem ist der ansatz sooo falsch auch nicht.
      - einfach die plz als int-wert in der tabelle führen
      - die abfrage mit between laufen lassen

      die führende 0 lässt sich bei der ausgabe (gekoppelt an eine bedingung)
      mit sprintf() anfügen ... mal als vorschlag
      Kissolino.com

      Kommentar


      • #18
        @asp2php: Man hast du heute ne laune.
        Original geschrieben von asp2php
        "soviel wie nötig und so wenig wie möglich"
        Du hast ja recht, aber es gibt keine Alternative, wenn man einerseits between-Bedinungen hat und anderer Seits Werte die auch mit 0 anfangen.
        Wer immer nur tut was er kann lernt nie was neues.

        Kommentar


        • #19
          Original geschrieben von schmalle
          Geburtsdatum: DATE ist schon OK. Man kann allerdings auch ein INT Feld nehmen, und einen TIMESTAMP reinschreiben.
          ich würde trotzdem empfehlen, beim DATE-typ zu bleiben.
          gerade bei sowas wie einem geburtsdatum ist es doch sehr wahrscheinlich, dass du mal eine abfrage in der art "alle geburtstage im monat mai" machen willst.
          bei einem timestamp müsstest du den erst innerhalb der query noch wieder in ein für mysql verständliches format umwandeln, bevor du MONTH() o.ä. drauf anwenden willst.

          wann immer man mit datumsangaben evtl. mal mehr machen will, als nur eine auf-/absteigende sortierung, bietet es sich an, einfach die von der DB angebotenen typen zu nehmen, weil man mit denen nachher einfach performanter arbeiten kann.
          I don't believe in rebirth. Actually, I never did in my whole lives.

          Kommentar


          • #20
            nochmal zum abschluss
            -------------------------------

            ich habe eine spalte namens "plz" die vom typ VARCHAR(10) ist.

            nun möchte ich abfragen, ob die plz 68984 zwischen 30000 und 50000 ist.

            select * from db where plz > 30000 AND plz < 50000

            muss ich da was ändern an der abfrage, denn ich kann doch kein VARCHAR mit INT vergleichen oder?

            Kommentar


            • #21
              Schau dir mal peinen Post an. Du kannst nämlich keine (Var)Char-Zahlenwerte vergleichen
              Wer immer nur tut was er kann lernt nie was neues.

              Kommentar


              • #22
                ja klar

                ja, das verstehe ich. in php bekomme ich das ja alles irgendwie hin.

                doch es kann doch nicht sein, dass z.b. eine community die vielleicht 1.000.000 user hat erst die komplette db mit allen user aus dem gewünschten land abfragen muss um dann in php so eine abfrage nach plz machen zu können oder?

                kann ich mir nicht vorstellen, dass wäre absolut langsam !!!

                Kommentar


                • #23
                  Denk mal nach

                  select * from db where plz > 30000 AND plz < 50000

                  wenn du eine PLZ hast, die z.B. so aussieht: 05962 und du hast die als INT abgespeichert erhälst du 5962.
                  Das kannst du in deiner Abfrage genau so einbauen wie z.B. 30000.
                  Wenn du dann dein Ergebniss hast und das ist eine deutsche PLZ, welche 4-stellig ist, weis man, das da ne 0 vorgehöhrt und lässt die bei der Ausgabe davor schreiben.

                  Fazit:
                  Wenn du die PLZ auf INT-Basis speicherst, kannst du alle möglichen Vergleiche in die Abfrage bauen, die bei (Var)Char nicht möglich währen. Und das bei deutschen 4-stelligen PLZ's die Servergeschwindigkeit durch vorschreiben eine 0 besonders leidet kann ich mir nicht vorstellen. Wenns nicht gerade nen PC10 oso ist
                  Wer immer nur tut was er kann lernt nie was neues.

                  Kommentar


                  • #24
                    ist mir klar christian

                    danke christian, aber das ist verständlich und war mir klar.

                    ich möchte die plz aber nicht als int wert abspeichern, da es im ausland auch postleitzahlen gibt, die buchstaben beinhalten.

                    und genau dafür suche ich eine antwort zu meiner frage ...

                    Kommentar


                    • #25
                      Original geschrieben von Svenner
                      nochmal zum abschluss
                      -------------------------------

                      ich habe eine spalte namens "plz" die vom typ VARCHAR(10) ist.

                      nun möchte ich abfragen, ob die plz 68984 zwischen 30000 und 50000 ist.

                      select * from db where plz > 30000 AND plz < 50000

                      muss ich da was ändern an der abfrage, denn ich kann doch kein VARCHAR mit INT vergleichen oder?
                      ich glaube du sollst die Grundlagen mal richtig lernen.

                      du muss die Grenzen auch als String angeben

                      select * from db where plz>'30000' AND plz<'50000'

                      Kommentar


                      • #26
                        Original geschrieben von ChristianM.
                        Fazit:
                        Wenn du die PLZ auf INT-Basis speicherst, kannst du alle möglichen Vergleiche in die Abfrage bauen, die bei (Var)Char nicht möglich währen. Und das bei deutschen 4-stelligen PLZ's die Servergeschwindigkeit durch vorschreiben eine 0 besonders leidet kann ich mir nicht vorstellen. Wenns nicht gerade nen PC10 oso ist
                        bei der Einstellung kann's nicht gut gehen. Stell dir mal vor, du arbeitest in einer Projektgruppe mit mehrere ProgrammiererInnen, jede schreibt ein Programmteil, jede denkt wie du, wie sieht das Programm performance mässig nachher aus?

                        Kommentar


                        • #27
                          Jo haste recht USA, Kanada ect.

                          Aber das ist nicht möglich man kann zwar innerhalb von selects eine Konvertierung vornehmen, aber es ist nicht möglich zwischen Typen zu springen. Beispielsweise könnte man Bit in INT konvertieren aber nicht Char in INT.

                          Sry
                          Gruß Christian
                          Wer immer nur tut was er kann lernt nie was neues.

                          Kommentar


                          • #28
                            Original geschrieben von asp2php
                            wie sieht das Programm performance mässig nachher aus?
                            Sicher ist das nicht schön. Das ist sogar sehr beschissen, aber es lässt sich nicht anders handhaben oder?
                            Gruß Christian
                            Wer immer nur tut was er kann lernt nie was neues.

                            Kommentar


                            • #29
                              Original geschrieben von ChristianM.
                              JBeispielsweise könnte man Bit in INT konvertieren aber nicht Char in INT.
                              Ach, weisst du, lese die Doku nochmals ...

                              Kommentar


                              • #30
                                Original geschrieben von ChristianM.
                                Aber das ist nicht möglich man kann zwar innerhalb von selects eine Konvertierung vornehmen, aber es ist nicht möglich zwischen Typen zu springen. Beispielsweise könnte man Bit in INT konvertieren aber nicht Char in INT.
                                eine VARCHAR-spalte, die eine zahl beinhaltet, kann man in einer query ganz leicht in eine "richtige" zahl konvertieren, in dem man den spaltenwert z.b. mit 1 multipliziert.

                                wenn keine zahl drinsteht, weiß nicht, ob dann dabei ein fehler rauskommt, oder einfach null.

                                in letzterem fall könnte man ja einfach mit
                                WHERE land="DE" AND (plz * 1) BETWEEN (30000, 39999)
                                selektieren ...

                                (mit subselect zuerst mal nur die selektieren, wo das land DE ist, wäre natürlich performanter - aber erst ab mysql 4 möglich.)


                                p.s. @ChristianM:
                                nimm doch bitte mal wie w3c-buttons aus deiner sig raus, die nerven.
                                einfache textlinks zu den validatoren tun's doch auch, wenn du diesen hinweis schon für nötig hältst.
                                btw: so lange die in deinem profil angegebene seite nicht mal validiert, solltest du vllt. ganz darauf verzichten :-)
                                Zuletzt geändert von wahsaga; 16.07.2004, 12:59.
                                I don't believe in rebirth. Actually, I never did in my whole lives.

                                Kommentar

                                Lädt...
                                X