ako vytvorit dotaz na databazu

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Matej123
Člen | 150
+
0
-

Ahojte, chcel by som vytvorit takyto dotaz :

<?php
	$this->database->query("SELECT * FROM application WHERE application.ID NOT IN("
                       . "SELECT application.ID FROM application_server)")
?>

ako to zapisem pomocou metod where() a select() ? Ked to pouzijem sposobom uvedenym hore tak mi to nevracia instancie ActiveRow a ja ich potrebujem.

Jedna sa o klasicky dotaz ked mam tabulky application, application_server a server. Application_server je tabulka na zaklade vztahu M:N medzi application a server. Chcem ziskat udaje z application, ktore sa nenachadzaju v tabulke application_server.

Dakujem.

ViPEr*CZ*
Člen | 818
+
0
-
$this->database
   ->table("application")
   ->where("application.ID NOT IN(?)", new SqlLiteral("SELECT application.ID FROM application_server"));

zkouším schválně jen tak z hlavy…

Editoval ViPEr*CZ* (11. 4. 2016 14:05)

Matej123
Člen | 150
+
0
-

SqlLiteral mi neberie, treba naimportovat nejaku triedu?

ViPErCZ napsal(a):

$this->database
   ->table("application")
   ->where("application.ID NOT IN(?)", new SqlLiteral("SELECT application.ID FROM application_server"));

zkouším schválně jen tak z hlavy…

ViPEr*CZ*
Člen | 818
+
0
-

Je nutný namespace akorát: Nette\Database\SqlLiteral

Matej123
Člen | 150
+
0
-

funguje to spravne, dakujem. Ale mozem vypisat iba application.ID, ako to zmenit aby som vypisal ktorykolvek stlpec z tabulky application?

ViPErCZ napsal(a):

Je nutný namespace akorát: Nette\Database\SqlLiteral

ViPEr*CZ*
Člen | 818
+
0
-
$this->database
	->select("*")
   ->table("application")
   ->where("application.ID NOT IN(?)", new SqlLiteral("SELECT application.ID FROM application_server"));

doplněním klasického select ;-)

Matej123
Člen | 150
+
0
-

jasne, diky :) dnes mi to nemysli :( inak ten select az za table sa ma dat ;)

ViPErCZ napsal(a):

$this->database
	->select("*")
   ->table("application")
   ->where("application.ID NOT IN(?)", new SqlLiteral("SELECT application.ID FROM application_server"));

doplněním klasického select ;-)

David Matějka
Moderator | 6445
+
0
-

funguje to spravne, dakujem. Ale mozem vypisat iba application.ID, ako to zmenit aby som vypisal ktorykolvek stlpec z tabulky application?

pri pozadavku na jiny sloupec to hodilo nejakou chybu nebo co?

Matej123
Člen | 150
+
0
-

ano vyhodilo ze nepozna ten stlpec, ale uz je to v poriadku. Ale znova mam problem, ak vytvorim dva riadky v tabulke application, ktore nie su v application tak mi ich vrati dobre, ale ak mam jeden riadok, ktoreho application_id je v application_server a iny riadok ktory nema v application_server svoje application_id, tak mi nevrati ziaden riadok. Staci ak jedno application_id je v application_server a stale mi vyhodi nulu :( . AKo pocet riadkov myslim.
Neviem preco :(

David Matějka napsal(a):

funguje to spravne, dakujem. Ale mozem vypisat iba application.ID, ako to zmenit aby som vypisal ktorykolvek stlpec z tabulky application?

pri pozadavku na jiny sloupec to hodilo nejakou chybu nebo co?

Editoval Matej123 (11. 4. 2016 14:46)

Matej123
Člen | 150
+
0
-

uz som to poriesil :) .

Matej123 napsal(a):

ano vyhodilo ze nepozna ten stlpec, ale uz je to v poriadku. Ale znova mam problem, ak vytvorim dva riadky v tabulke application, ktore nie su v application tak mi ich vrati dobre, ale ak mam jeden riadok, ktoreho application_id je v application_server a iny riadok ktory nema v application_server svoje application_id, tak mi nevrati ziaden riadok. Staci ak jedno application_id je v application_server a stale mi vyhodi nulu :( . AKo pocet riadkov myslim.
Neviem preco :(

David Matějka napsal(a):

funguje to spravne, dakujem. Ale mozem vypisat iba application.ID, ako to zmenit aby som vypisal ktorykolvek stlpec z tabulky application?

pri pozadavku na jiny sloupec to hodilo nejakou chybu nebo co?

ViPEr*CZ*
Člen | 818
+
0
-

No jasně… select až za table… taky mi to nějak nemyslí, když dělám X věcí :-D Díky za upomínku. ;-)

Editoval ViPEr*CZ* (11. 4. 2016 16:21)

Unlink
Člen | 298
+
0
-

Matej123 napsal(a):

ano vyhodilo ze nepozna ten stlpec, ale uz je to v poriadku. Ale znova mam problem, ak vytvorim dva riadky v tabulke application, ktore nie su v application tak mi ich vrati dobre, ale ak mam jeden riadok, ktoreho application_id je v application_server a iny riadok ktory nema v application_server svoje application_id, tak mi nevrati ziaden riadok. Staci ak jedno application_id je v application_server a stale mi vyhodi nulu :( . AKo pocet riadkov myslim.
Neviem preco :(

A v čom bol problém a ako si ho vyriešil :)

Matej123
Člen | 150
+
0
-

Pouzil som ten kod:

<?php
	$this->database
   		->table("application")
		->select("*")
   		->where("application.ID NOT IN(?)", new SqlLiteral("SELECT application.ID FROM application_server"));
?>

no v application_server mam atributy APPLICATION_ID a SERVER_ID. v SqlLiteral v selecte som musel pouzit APPLICATION_ID nie application_ID :

<?php
	$this->database
   		->table("application")
		->select("*")
   		->where("application.ID NOT IN(?)", new SqlLiteral("SELECT APPLICATION_ID FROM application_server"));
?>

Unlink napsal(a):

Matej123 napsal(a):

ano vyhodilo ze nepozna ten stlpec, ale uz je to v poriadku. Ale znova mam problem, ak vytvorim dva riadky v tabulke application, ktore nie su v application tak mi ich vrati dobre, ale ak mam jeden riadok, ktoreho application_id je v application_server a iny riadok ktory nema v application_server svoje application_id, tak mi nevrati ziaden riadok. Staci ak jedno application_id je v application_server a stale mi vyhodi nulu :( . AKo pocet riadkov myslim.
Neviem preco :(

A v čom bol problém a ako si ho vyriešil :)

CZechBoY
Člen | 3608
+
0
-

Jedeš na oraclu, ne? Ten má takový problémy s velikostí písmen.