Du befindest Dich im Archiv vom ABAKUS Online Marketing Forum. Hier kannst Du Dich für das Forum mit den aktuellen Beiträgen registrieren.

MySQL: Liegt 88.198.43.39 zw. 88.198.14.147-88.198.255.255??

Ajax, Hijax, Microformats, RDF, Markup, HTML, PHP, CSS, MySQL, htaccess, robots.txt, CGI, Java, Javascript usw.
Neues Thema Antworten
Airport1
PostRank 10
PostRank 10
Beiträge: 4489
Registriert: 16.08.2004, 18:50
Wohnort: Backnang / bei Stuttgart

Beitrag von Airport1 » 28.02.2007, 14:30

Es geht um eine bestehende DB mit IPRange Eintraegen:
z.B. ist ein Datensatz:

entry - entryend
88.198.14.147 88.198.255.255

Nun moechte ich herausfinden ob eine IP, z.B. "88.198.43.39" dazw. liegt. In Meta-Sprache quasi:

WHERE '$search' >= entry AND '$search' <= entryend

Das klappt natuerlich so einfach nicht. Daher suche ich hierfuer eine Idee, fuer eine Art "natuerlicheREn" String-Vergleich, sofern moeglich.

Natuerlich koennte man pfuschen, und alles als in der DB auch als LONG Werte ablegen, oder erst alle Datensaetze auslesen und in einer Schleife in LONG Werte als Array jedesmal konvertieren, aber es ist und bleibt Pfusch.

Hat jemand hierfuer eine Idee? Vielleicht jedes Oktett mit SUBSTR und der entsprech. 16er Potenz ausmultiplizieren? Oder gehts viel viel einfacher??
Linktauschanfragen zwecklos
https://www.bot-trap.de/ Spamschutz fuer Webmaster - zentrale Meldestelle fuer Web Spam
https://www.airport1.de/blog/ Lombagruschd Blog mid Gardadierle
https://www.ranking-hits.de/ Counter & PR Service

Anzeige von ABAKUS

von Anzeige von ABAKUS »

SEO Consulting bei ABAKUS Internet Marketing
Erfahrung seit 2002
  • persönliche Betreuung
  • individuelle Beratung
  • kompetente Umsetzung

Jetzt anfragen: 0511 / 300325-0.


SISTRIX
PostRank 9
PostRank 9
Beiträge: 1255
Registriert: 01.09.2003, 20:57
Wohnort: Bonn

Beitrag von SISTRIX » 28.02.2007, 14:47

Komische Datenbankstruktur hast du da. Wieso nicht mit "normaler" CIDR-Notation arbeiten?

Gruß Johannes
SISTRIX Suchmaschinen Blog
SEO- und SEM-Tools: [url=httpss://tools.sistrix.de/toolbox/?tid=lnk_foren_abk]SISTRIX Toolbox[/url]
Linktausch für PR9 und 10 gesucht!

twitch
PostRank 9
PostRank 9
Beiträge: 1222
Registriert: 09.04.2005, 14:01

Beitrag von twitch » 28.02.2007, 15:14

In MySQL wird das meiner Meinung nach leider nicht funktionieren.

Lösung:
PHP-Schnippsel...Ungestestet:

Code: Alles auswählen

if &#40;ip2str&#40;$start&#41; <= ip2str&#40;$ip&#41;
    AND
    ip2str&#40;$ip&#41; <= ip2str&#40;$ende&#41;&#41;
...

function ip2str&#40;$ip&#41; &#123;
    $ip = preg_replace&#40;"/&#40;\d&#123;1,3&#125;&#41;\.?/e",
                       'sprintf&#40;"%03d", \1&#41;',
                        $ip&#41;;
    return &#40;string&#41;$ip;
&#125;
Statt if() versuch mal strcmp()...

SEO - History, Tools, Videos, Downloads und mehr auf https://www.seo-ranking-tools.de/

bull
PostRank 9
PostRank 9
Beiträge: 2166
Registriert: 20.09.2003, 20:57
Wohnort: Vèneto

Beitrag von bull » 28.02.2007, 18:14

Natuerlich koennte man pfuschen, und alles als in der DB auch als LONG Werte ablegen
Ist kein Pfusch, sondern wahrscheinlich die sinnvollste Methode.
Spart außerdem Speicher, IPs nur als "LONG" in der DB zu halten ;)

Airport1
PostRank 10
PostRank 10
Beiträge: 4489
Registriert: 16.08.2004, 18:50
Wohnort: Backnang / bei Stuttgart

Beitrag von Airport1 » 28.02.2007, 18:19

Hm, des isch fei wahr, sind dann je nur 4 byte gegenueber max. 15 byte, jedesmal.
Aber mi reizt halt a weng ob des ned au so gohd. mal no abwarde ob jemand mit ner super idee daher kommd ,)
Linktauschanfragen zwecklos
https://www.bot-trap.de/ Spamschutz fuer Webmaster - zentrale Meldestelle fuer Web Spam
https://www.airport1.de/blog/ Lombagruschd Blog mid Gardadierle
https://www.ranking-hits.de/ Counter & PR Service

Pompom
PostRank 10
PostRank 10
Beiträge: 3751
Registriert: 10.09.2004, 16:38

Beitrag von Pompom » 28.02.2007, 18:52

Wend zoahln zoahln sind, sollst fei oach de zoahln oas zoahln behanddln.

Anonymous

Beitrag von Anonymous » 28.02.2007, 20:20

hmm... schau dir mal

SUBSTRING_INDEX()

an, damit könnteste ne ip an den punkten trennen und die zahlen einzeln vergleichen...

wäre theoretisch also in mysql lösbar, aber ob es sinn macht ist ne andere frage

Hasenhuf
PostRank 9
PostRank 9
Beiträge: 2840
Registriert: 26.12.2005, 22:22

Beitrag von Hasenhuf » 01.03.2007, 17:51

Ich würde die DB ändern und die Spalte in zwei Spalten "von" "bis" aufteilen.

Airport1
PostRank 10
PostRank 10
Beiträge: 4489
Registriert: 16.08.2004, 18:50
Wohnort: Backnang / bei Stuttgart

Beitrag von Airport1 » 01.03.2007, 18:15

? es sind bereits zwei spalten. habe jetzt doch die iplongs in der db..
neben der platzersparnis spart man auch noch zeit:
da ein reiner zahlenvergleich immer schneller ist als strings zu vergleichen ;)
Linktauschanfragen zwecklos
https://www.bot-trap.de/ Spamschutz fuer Webmaster - zentrale Meldestelle fuer Web Spam
https://www.airport1.de/blog/ Lombagruschd Blog mid Gardadierle
https://www.ranking-hits.de/ Counter & PR Service

Hasenhuf
PostRank 9
PostRank 9
Beiträge: 2840
Registriert: 26.12.2005, 22:22

Beitrag von Hasenhuf » 04.03.2007, 15:30

Ach so, WHERE '$search' >= entry AND '$search' <= entryend funktioniert nur wegen der Punkte und Stellen nicht. Warum speicherst Du die IPs nicht ohne Punkte und füllst die ein- und zweistelligen Blöcke nicht mit Nullen auf?

PS: Was sind "iplongs"?

Anonymous

Beitrag von Anonymous » 04.03.2007, 16:01

schau dir mal hier an wie ip adressen aufgebaut sind:
https://de.wikipedia.org/wiki/IP-Adresse

die schreibweise mit den 4 Zahlengruppen und den Punkten ist ja nur weil wir uns mit dem Binär-, Oktal- und Hexadezimalsystem ein klein wenig schwer tun... ;-)

so lässt sich eine IP Adresse auch in den verschiedensten Zahlensystemen als eine Zahl darstellen, also auch als reine Integer, und so mit dann auch simpel in einem Vergleich verwenden...

Southmedia
PostRank 10
PostRank 10
Beiträge: 7322
Registriert: 20.07.2003, 19:56

Beitrag von Southmedia » 04.03.2007, 16:03


Antworten
  • Vergleichbare Themen
    Antworten
    Zugriffe
    Letzter Beitrag