[MySQL] Join & Umkreissuche :D

ChristianK

Well-known member
ID: 85965
L
25 Mai 2006
92
1
Hi,

ja, ich bins wieder :D Mein Problem geht weiter. Und zwar habe ich mal ein Script gemacht, was mir ein Planet raus sucht, auf dem keiner wohnt. *g*

Soweit geht es schon, jedoch will ich noch schauen, um im Umkreis von einem Feld kein anderer Planet oder ein Schiff ist. Die Schiffe stehen im Table 'space', die Planeten im Table 'planeten'.

Mein bisheriger Query:
Code:
SELECT w.x, w.y
FROM world AS w
LEFT JOIN planeten AS p ON w.id = p.world_id
WHERE w.typ = 'p'
AND p.besitzer IS NULL
LIMIT 1

Also der Umkreis müsste ja folgendes sein:
(w.x-1) bis (w.x+1) && (w.y-1) bis (w.y+1)

Kann man dem jetzt sagen, im Umkreis soll er keine Schiffe und Planeten ausgeben?



Christian
 
Deine Fragestellung verstehe ich leider noch nicht ganz...
aber in SQL lässt sich BETWEEN nutzen, das könnte dir helfen.
 
Oder machen wir es anders:

Wie kann man diesen Query optimieren, denn er dauert schon über 5 Sekunden :-/

Code:
SELECT w.x, w.y
FROM world AS w
LEFT JOIN planeten AS p ON w.id = p.world_id
WHERE w.typ = 'p'
AND p.besitzer IS NULL
AND NOT
EXISTS (

SELECT 1
FROM world w2
WHERE w2.x
BETWEEN w.x -1
AND w.x +1
AND w2.y
BETWEEN w.y -1
AND w.y +1
AND w2.id <> w.id
AND w2.typ
IN (
's', 'p'
)
)
LIMIT 1
 
durch den subquery braucht es solange, weil da ja unmengen subquerys erzeugt werden, also umformulieren und in nen join verwandeln