2012-04-01 7 views
0

Dies ist eine Teilmenge einer größeren Abfrage, die ich in phpmyadmin ausgearbeitet habe, aber ich bin ein wenig verloren und verwirrt bei der Syntax, es zu bekommen arbeite in einer Komponente, die ich in Joomla erstelle.Joomla: scheint nicht zu fallen oder Tabellen zu erstellen oder löschen sogar Zeilen mit JDatabase

Der Code, der in phpMyAdmin funktioniert:

drop table if exists tests_mod_ques; 
create table tests_mod_ques as 
select p.student_userid, q.question_mod, q.question_id, p.student_passedchk 

from `tests_students` p 
inner join `tests_questions` q on p.question_id = q.question_id 
group by p.student_userid, q.question_mod, q.question_id, p.student_passedchk 
; 

Der Code, der eine 1064 Syntaxfehler ist zu werfen:

$query = parent::getListQuery(); 

$query->dropTable('#__tests_mod_ques', 'true'); 
$query->createTable('#__tests_mod_ques AS 
    select (p.student_userid 
    , q.question_mod 
    , q.question_id 
    , p.student_passedchk) 
    '); 
$query->from('#__tests_students AS p'); 
$query->join('#__tests_questions AS q ON p.question_id = q.question_id'); 
$query->group('p.student_userid 
    , q.question_mod 
    , q.question_id 
    , p.student_passedchk 
    '); 

    .... 
    $db = $this->getDbo(); 
    return $query; 

ich nur die dropTable statment getestet und obwohl es nicht werfen einen Fehler haben es hat nicht den Tisch fällt noch im Debugger angezeigt, so bin ich wahrscheinlich nicht so richtig mit: http://api.joomla.org/Joomla-Platform/Database/JDatabase.html#dropTable

Kann nicht scheinen, ein zu finden Y-Referenz zum Erstellen außer für diese:

Auch ich habe eine INSERT…ON DUPLICATE KEY UPDATE Abfrage kommen, dass ich nicht sicher bin, wie man entweder an.

Danke!

bearbeiten

ich Zeilen als Behelfslösung versucht haben, löschen, nicht registrieren, auch nicht. Der Debugger wurde erneut überprüft und die Löschabfrage wird nicht angezeigt.

$query->delete('#__tests_mod_ques'); 

Das

Frustrierende nach http://api.joomla.org/Joomla-Platform/Database/JDatabaseQuery.html#$delete und http://docs.joomla.org/JDatabaseQuery::delete/1.6 arbeiten sollte! Hat jemand eine Idee?

Danke!

+0

Können Sie die Abfrage drucken, so dass Sie sehen konnten, ob es richtig von DB-Klasse interpretiert wird? –

+0

Wenn ich ' Ich mache es richtig (das könnte ein großes if sein!), dann taucht die dropTable nicht auf. Warf ein 'print_r ($ query);' dort tauchte die dropTable nicht auf, sondern der Rest der Abfrage (der ' "Teil, der funktioniert hat", hat es auch nicht im Debugger gezeigt, warum ich denke, dass ich es nicht richtig gebrauche, aber keine guten Beispiele finde. – Gisto

Antwort

0

Sie können versuchen, die folgenden -

$query->createTable('#__tests_mod_ques AS 
select (p.student_userid 
, q.question_mod 
, q.question_id 
, p.student_passedchk) 
from #__tests_students AS p 
inner join #__tests_questions AS q ON p.question_id = q.question_id 
group by p.student_userid 
, q.question_mod 
, q.question_id 
, p.student_passedchk'); 
0

Das Problem aus der Tatsache sein, dass $ query der Klasse JDatabaseQuery ist, weil, wie Sie es initialisiert, so hat es nur die hier aufgeführten Methoden: http://docs.joomla.org/JDatabaseQuery/1.6

Die Methoden, die Sie aufrufen möchten, sind tatsächlich Methoden der JDatabase, mit der Sie am Ende eine Instanz erstellen. Also sollten Sie in der Lage sein $ db-> createTable (... etc und es wird tatsächlich laufen.

Verwandte Themen