Nette\Database Query DELETE hlásí syntax error

MW
Člen | 615
+
0
-

Zdravím a prosím o radu,

Toto me hlásí SQL syntax error

$this->database->query("​​DELETE FROM rides WHERE NOT EXISTS (SELECT id FROM actions WHERE actions.rides_id = rides.id)");
SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '​​DELETE FROM rides WHERE NOT EXISTS (SELECT id FROM actions WHERE actions.r' at line 1

Ale dotaz mám správně

"​​DELETE FROM rides WHERE NOT EXISTS (SELECT id FROM actions WHERE actions.rides_id = rides.id)"

Projde bez problému.

Kde může být chyba prosím?

Díky

Editoval MW (29. 5. 2018 15:01)

MW
Člen | 615
+
0
-

Nikdo netuší, proč to query() vyhodí na syntax error?
Nenapadá někoho, jak to alespoň obejit, prosím?

neznamy_uzivatel
Člen | 115
+
0
-

SELECT id FROM actions WHERE actions.rides_id = rides.id
→ Unknown column ‚rides.id‘ in ‚where clause‘

Upravil jsem:
SELECT id FROM actions, rides WHERE actions.rides_id = rides.id
→ Column ‚id‘ in field list is ambiguous

Takže ještě jedna úprava:
SELECT rides.id AS id FROM actions, rides WHERE actions.rides_id = rides.id

Nakonec ještě nejde tu podmínku psát vzhledem k tabulce, kde děláš insert/update/delete, takže dohromady:
DELETE FROM rides WHERE NOT EXISTS (SELECT rides.id AS id FROM actions, (SELECT * FROM rides) as rides WHERE actions.rides_id = rides.id)

To ale jen tak na rychlovku :) Dotaz projde, ale nezaručuju, že dělá to, co chceš :)

neznamy_uzivatel
Člen | 115
+
0
-

A taky to asi není úplně super pro nějaké obrovské tabulky..

David Matějka
Moderator | 6445
+
0
-

@MW

  1. kdyz ten dotaz spustis pres adminer, tak funguje?
  2. kdyz se kouknes do query panelu, jak ten dotaz vypada?
MW
Člen | 615
+
0
-

David Matějka napsal(a):

@MW

  1. kdyz ten dotaz spustis pres adminer, tak funguje?
  2. kdyz se kouknes do query panelu, jak ten dotaz vypada?

Ano, přes phpmyadmin či adminer projde a udělá co má.
V Query panelu je také naprosto stejně.

Ale v query() prostě neprojde… I v query panelu je u něj ERROR.

MW
Člen | 615
+
0
-

Vyřešeno:

$this->database->table('rides')->where('NOT EXISTS(SELECT id FROM actions WHERE actions.rides_id = rides.id)')->delete();