@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.
MYSQL Spaltentypen
Einklappen
X
-
Original geschrieben von asp2php
"soviel wie nötig und so wenig wie möglich" sollst du deine Query aufbauen.
- 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
Kommentar
-
@asp2php: Man hast du heute ne laune.
Original geschrieben von asp2php
"soviel wie nötig und so wenig wie möglich"Wer immer nur tut was er kann lernt nie was neues.
Kommentar
-
Original geschrieben von schmalle
Geburtsdatum: DATE ist schon OK. Man kann allerdings auch ein INT Feld nehmen, und einen TIMESTAMP reinschreiben.
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
-
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
-
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
-
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 istWer immer nur tut was er kann lernt nie was neues.
Kommentar
-
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
-
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?
du muss die Grenzen auch als String angeben
select * from db where plz>'30000' AND plz<'50000'
Kommentar
-
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
Kommentar
-
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ß ChristianWer immer nur tut was er kann lernt nie was neues.
Kommentar
-
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.
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, 13:59.I don't believe in rebirth. Actually, I never did in my whole lives.
Kommentar
Kommentar