2016-01-02 25 views
7

Joomla sitemdeki bir tablodan "tamamlanmış" satırları periyodik olarak farklı bir tabloya taşıyacak bir PHP betiği oluşturmaya çalışıyorum.Joomla'daki Tablolar Arasında Geçiş Satırları

INSERT INTO my_calsgovdocs.sent_copy 
SELECT * FROM my_calsgovdocs.entered_copy 
WHERE `Status` LIKE '%Sent%'; 
DELETE FROM my_calsgovdocs.entered_copy 
WHERE `Status` LIKE '%Sent%'; 

Ben Joomla içine çalıştırabilir bazı PHP kodu çevirmek için çalıştı ve ben aşağıda bu kodu yapıştırdıktan: Sorgu ben phpMyAdmin sadece iyi eserler yazdı. ->insert into'u başlatan aşağıdaki satırı gösteren bir "Beklenmedik T_STRING" hatası döndürdü ve şimdi "insert in" (geçerli bir yöntem adı) olmadığı için komut dosyasının çalışmayacağını bana gösterdi. Şimdiye kadar Joomla'da kullanılacak eşdeğer bir yöntem bulamıyorum. Bu benim girişimde şu oldu: Bu Joomla içinde bunu nasıl başarabilirim hakkında bir fikrim var mı? Tek bir işlemde yapmak için (yukarıda gördüğünüz gibi) tercih ederim ki, eğer bir hata varsa, ellerimde bir karışıklık olmayacak.

+0

İçinde yer olamaz. Niye sadece 'insert' kullanmadığınızı bilmiyorum. Ancak gerçekten istiyorsanız, sorgu kurgusunu kullanmak yerine sorgu dizesinin bir parçası olarak 'insert 'yazabilirsiniz. Her şey zaten işe yaramayacak çünkü 'insert' ve 'delete'leri bu şekilde karıştıramazsınız. – Elin

+0

"Tamamlanmış" durumu belirtmek için tabloda bir tür durum/iş akışı durumu alanı kullanamazsınız. Sonraki sorgular/görünümler vb. Daha sonra birden çok tabloyu sorgulamaktan ziyade buna göre filtre uygulayabilir. – developerjack

+0

@Elin Yep; Kesinlikle bir alan kullanamayacağımı biliyorum; "Ekle" ile kastettiğim şey geçerli bir yöntem adı değil! " Sorgu dizgisi gitmenin yolu olabilir; Önerin için teşekkürler. Yine de, 'insert' ve 'delete' öğelerini karıştırmamanın ne anlama geldiğini anladığımdan emin değilim; Yukarıda yapıştırılan SQL sorgusu yeterince çalıştı, sadece PHP/Joomla'nın içinden tetikleyebilmem gerekiyordu. Bunu detaylandırır mısın? – ruinlach

cevap

0

Düz eski php'de yapmayı deneyebilirsiniz?

0

$ db-> setQuery, bir nesne yerine bir argüman olarak sorgu dizesinin geçirilmesine izin verir. "Sorguyu hazırlama" bölümüne bakın: https://docs.joomla.org/J1.5:Accessing_the_database_using_JDatabase

Ayrıca, bu sorgulardan ikisini de aynı işlemin parçası olarak çalıştırmayı önerdim.

Ne yazık ki bunu denemek için kullanışlı bir joomla kurulumuna sahip değilim, işe yaramazsa, lütfen yorum yapın.

try 
{ 
    $db->transactionStart(); 

    $query = $db->getQuery(true); 

    $query1 = "INSERT INTO my_calsgovdocs.sent_copy 
    SELECT * FROM my_calsgovdocs.entered_copy 
    WHERE `Status` LIKE '%Sent%'"; 

    $db->setQuery($query1); 
    $result1 = $db->execute(); 

    $query2 = "DELETE FROM my_calsgovdocs.entered_copy 
    WHERE `Status` LIKE '%Sent%'"; 

    $db->setQuery($query2); 
    $result2 = $db->execute(); 

    $db->transactionCommit(); 
} 
catch (Exception $e) 
{ 
    $db->transactionRollback(); 
    JErrorPage::render($e); 
} 
+0

Bir cevap verirken [NEDEN sizin cevabınız ile ilgili bir açıklama] vermeniz tercih edilir (http://stackoverflow.com/help/how-to-answer). –