[mysql] pobranie 2 zmiennych z bazy

0

witam

mam oto taką tabelę w bazie:

id x y
1 1 3
2 4 5

w tej tabeli zapisuję rekordy o określonych współrzędnych

chciałbym pobrać jakieś X i jakieś Y, które nie występuje w ogóle w tej tabeli i jest np z przedziału -100 do 100

da się to zrobić?

0

da sie
najlatwiej dwie petle od -100 do 100, pierwsza iteruje x, druga y i sprawdzasz czy taka para x i y juz wystepuja, jesli nie to zwracasz
chyba ze nie chcesz najmniejszego zawsze nie wykorzystanego punktu
jak sobie z tym poradzisz mozna pobawic sie w jakis optymalizacje

0

ale ja nie chcę puszczać pętli w PHP, chcę to zrobić w zapytaniu do mysql

i wolałbym, żeby wartość była losowa, a nie najmniejsza

0

Mój sposób jest jednym z wielu niekoniecznie najlepszym, wymyślonym na szybko ale działającym.

Przygotuj sobie tabelkę pomocniczą:

CREATE TABLE Pos
(
  id INT NOT NULL AUTO_INCREMENT,
  x INT NOT NULL,
  y INT NOT NULL,
  CONSTRAINT PK_Pos PRIMARY KEY (id),
  CONSTRAINT BK_Pos UNIQUE INDEX NONCLUSTERED (x, y)
);

Wypełnij ją wszystkimi dopuszczalnymi wartościami:

  DECLARE myx INT DEFAULT -100;
  DECLARE myy INT DEFAULT -100;

  WHILE myx <= 100 DO
  BEGIN
    WHILE myy <= 100 DO
    BEGIN
      INSERT INTO Pos (x, y) VALUES (myx, myy);
      SET myy = myy + 1;
    END;
    END WHILE;
    SET myy = -100
    SET myx = myx + 1;
  END;
  END WHILE;

Na tak przygotowanej bazie wystarczy wykonać jednego selecta w celu pobrania wartości, która jeszcze nie występuje w tabeli "Tabela".

SELECT p.x, p.y
FROM Pos p
LEFT OUTER JOIN Tabela t ON t.x = p.x AND t.y = p.y
WHERE t.id IS NULL
ORDER BY RAND()
LIMIT 0, 1;
0

podobnie wcześniej robiłem :)

myślałem, że może da się w jakiś prosty sposób poprzez 1 zapytanie to zrobić

0

Zawsze możesz jeszcze losować w pętli wartość x i y do czasu znalezienie kombinacji nie występującej w tabeli ale takie zapytanie może się wykonywać bardzo długo.

1 użytkowników online, w tym zalogowanych: 0, gości: 1