Thorsten: Umkreissuche sehr umstaendlich

Beitrag lesen

Magst du mir hir die Formel verraten? Da ich irgendwie nix finde oder falsch suche.

Magst du uns die nötigen Informationen verraten um dir evtl. helfen zu können?

Also jetzt mal so fast ganz von vorne weil das wohl nicht zum ziel führt.

Ich bin jetzt dabei die Rechnung zu ändern, weil diese einfach viel zu komplex ist und auch viel Zeit dauert wie mir ja schon mitgeteil wurde.

In der Tabelle Orte stehen PLZ Laenge und Breitenangabe.
Breite und Länge sind in Grad angegeben.
Um in der Datenbank nicht so viel zu Rechnen habe ich die oben stehende Formel übernommen.
SQRT(($laenge - o.laenge) * ($laenge - o.laenge) + ($breite - o.breite) * ($breite - o.breite))  <= ".$umkreis_grad."

Den angegebenene Umkreis muss ich also in Grad umrechnen.
Das funktioniert am Equator so

$umkreis_grad = 360 / 40008 * $umkreis;
Da ich aber weiter Nördlich Wohne stimmt der Wert 400008 nicht mehr, da der Umkreis sich der Erde ja kleiner wird.
Als anhaltspunkt wo sich denn der jenige befindet, der den Umkreis angegeben hat, habe ich seine PLZ damit kann ich ganz ein mir die Breiten und Längengrade aus der Tabelle Orte holen.

Aber ich kenne jetzt diese Formel einfach nicht.

Um das ganze noch zu vervollständigen Poste ich euch noch mal mein Datenbankdesign.

Ach und nein ich möchte nicht den Wirkungsgrad von Bomben berechnen XD. Wobei die Bezeichnung schon heftig währe. ( Events )

Das ist die Tabele Orte

CREATE TABLE orte (
  ort\_id int(11) NOT NULL,
  staat varchar(2) collate latin1_general_ci NOT NULL,
  bundesland varchar(2) collate latin1_general_ci NOT NULL,
  regierungsbezirk varchar(50) collate latin1_general_ci NOT NULL,
  landkreis varchar(50) collate latin1_general_ci NOT NULL,
  verwaltungszusammenschluss varchar(100) collate latin1_general_ci NOT NULL,
  ort varchar(100) collate latin1_general_ci NOT NULL,
  laenge double NOT NULL,
  breite double NOT NULL,
  plz smallint(5) NOT NULL,
  PRIMARY KEY  (ort\_id)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;

Und das die Tabelle event

CREATE TABLE event (
  event\_id int(11) NOT NULL auto_increment,
  kat\_id int(11) NOT NULL,
  user\_id int(11) NOT NULL,
  erstellt date NOT NULL,
  titel varchar(200) collate latin1_general_ci NOT NULL,
  location varchar(200) collate latin1_general_ci NOT NULL,
  strasse varchar(200) collate latin1_general_ci NOT NULL,
  hausnummer varchar(10) collate latin1_general_ci NOT NULL,
  plz varchar(5) collate latin1_general_ci NOT NULL,
  ort varchar(200) collate latin1_general_ci NOT NULL,
  hotline varchar(200) collate latin1_general_ci NOT NULL,
  hotmail varchar(250) collate latin1_general_ci NOT NULL,
  thotline varchar(200) collate latin1_general_ci NOT NULL,
  thotmail varchar(250) collate latin1_general_ci NOT NULL,
  fsa\_datum date NOT NULL,
  ugb\_datum date NOT NULL,
  fsu\_zeit varchar(20) collate latin1_general_ci NOT NULL,
  ugb\_zeit varchar(20) collate latin1_general_ci NOT NULL,
  beschreibung text collate latin1_general_ci NOT NULL,
  freigabe varchar(200) collate latin1_general_ci NOT NULL,
  einlasskreterien text collate latin1_general_ci NOT NULL,
  abendkasse varchar(100) collate latin1_general_ci NOT NULL,
  ticketvorverkauf varchar(100) collate latin1_general_ci NOT NULL,
  gespert int(1) NOT NULL,
  spergrund text collate latin1_general_ci NOT NULL,
  PRIMARY KEY  (event\_id)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=8181 ;

So und jetzt nochmal zur Zielbeschreibung.

Die Tabelle Event kann groß werden. Es muss Problemlos funktionieren mit ein Paar 100.000 Datensätzen.

Dabei kann die suche eingeschränkt werden.
Und zwar nur nach denen die nicht gespert sind also gespert = fals / 0
Und es müssen nur die Berechnet werde die in der Zukunft oder am gleichen Tag statt finden. Eine Ausgabe von Events des lätzten jahres brauche ich nicht. Zumindest nicht an dieser Stelle.

Wenn jemand den Inhalt der Tabelle orte haben möchte einfach nur sagen.

Struppi.