Prüfen ob Koordinaten belegt


#21
Stehe da gerade auf dem Schlauch. Und wird bei deinem Code überprüft ob beispielsweise Feld X 13 Z 12 belegt ist oder nur X13?

Denn X 13 gibt es mehr als 100 mal mit anderen Z koordinaten.
 

Yaslaw

n/a
Moderator
#22
SQL:
                LEAST(q1.max_x, p1.max_x) >= GREATEST(q1.min_x, p1.min_x)
                OR LEAST(q1.max_z, p1.max_z) >= GREATEST(q1.min_z, p1.min_z)
Wie du siehst, wird X und Z überprüft.
 
#23
Wenn ich dich und den SQL-Befehl also richtig verstehe prüft er immer eine Kombination aus X und Z?
Und wo müsste ich das UPDATE für true und false dann unterbringen?
 

Yaslaw

n/a
Moderator
#24
Grosser Nachteil. Neue Einträge in die Quee werden so nicht gegenseitig geprüft.
SQL:
update tbl_quee
set is_free =
    (
        0 = (
            select count(p1.*)
            FROM
                my_table AS p1,
                tbl_quee AS q1
            WHERE
                q1.id = q.id
                AND ( 
                    LEAST(q1.max_x, p1.max_x) >= GREATEST(q1.min_x, p1.min_x)
                    OR LEAST(q1.max_z, p1.max_z) >= GREATEST(q1.min_z, p1.min_z)
                )
        )
    )
FROM tbl_quee
WHERE is_free IS NULL;
 
#25
Ok, werde mich die kommenden Tage mal daran setzen um es fertig zu bekommen.

Wenn mir eine Hürde im weg steht frage ich noch einmal nach^^

Was wird denn in das Feld is_free eingetragen?
 
#27
Ok jetzt melde ich mich doch schon früher als erwähnt.

Ich habe die tasks.php in der eine php-function ausführen möchte:
PHP:
include('functions/check.isfree.php'); 
if($_GET['tasktoken'] == "*******")
{
    is_free();
}
else
{
    echo "Token Falsch";
}
und hier ist die Php-datei in der die Function ist:
Code:
function is_free(){
include('settings/db.con.php');                                     //dort wird die PDO-verbindung aufgebaut
$statement = $pdo->prepare("update region_quee
set is_free =
    (
        0 = (
            select count(p1.*)
            FROM
                regionsregion_cuboid AS p1,
                region_quee AS q1
            WHERE
                q1.id = q.id
                AND (
                    LEAST(q1.max_x, p1.max_x) >= GREATEST(q1.min_x, p1.min_x)
                    OR LEAST(q1.max_z, p1.max_z) >= GREATEST(q1.min_z, p1.min_z)
                )
        )
    )
FROM region_quee
WHERE is_free IS NULL;


");
$statement->execute();
}

tables.png

Die MySql table sind schon korrekt benannt, aber mir wird die spalte is_free nicht auf true oder false gesetzt.
Leider erhalte ich keine einträge im errorlog, aus welchem Grund auch immer.
Vllt habe ich auch nur einen Denkfehler in all dem hier^^

Grosser Nachteil. Neue Einträge in die Quee werden so nicht gegenseitig geprüft.
Dafür kann ich bei der Eintragung in den Quee ja überprüfen ob solch ein Eintrag schon vorhanden ist.
 
Zuletzt bearbeitet:

EuroCent

Erfahrenes Mitglied
#28
Hier musst Du prüfen was er dir in der Sub Select ausgibt.

SQL:
select count(p1.*)
            FROM
                regionsregion_cuboid AS p1,
                region_quee AS q1
            WHERE
                q1.id = q.id
                AND (
                    LEAST(q1.max_x, p1.max_x) >= GREATEST(q1.min_x, p1.min_x)
                    OR LEAST(q1.max_z, p1.max_z) >= GREATEST(q1.min_z, p1.min_z)
                )