簡體   English   中英

在Joomla中將多個表寫入FROM行

[英]Writing multiple tables to FROM line in Joomla

在SELECT行中,我使用array()進行多個數據列檢索。 在WHERE行中,我可以使用簡單的concat字符串。 到現在為止還很清楚。 但是我找不到任何有關在FROM行中提供多個表名的文檔。 所有文檔都是聯接的用法,這對我來說很可怕。

我正在使用此結構來構建查詢。

$query->select(array(foo1,foo2));
$query->from($db->quoteName('#__footable'); ??? $_footable2 ???
$query->where($db->quoteName('fooname')." = ".$db->quote($foodata));

聽起來您想加入一個JOIN。 這是一個示例,它在一個查詢中獲取特定類別中的所有文章,這些文章被任意選擇為類別ID 3,以及類別標題。

$query->select('a.id, a.catid, a.title');
$query->from($db->quoteName('#__content') . ' AS a');
$query->select('c.title as category');
$query->join('LEFT', $db->quoteName('#__categories') . ' AS c ON c.id = a.catid');
$query->where('a.catid = 3');

注意添加了“ a”。 和“ c” 以確定任何字段名稱正在引用哪個表。 我強烈建議您回顧任何核心MVC路徑模型類,尤其是getListQuery()方法,因為它們將使用Joomla框架與JOIN示例一起加載。

在SQL的from子句中放置多個表的推薦方法是聯接。 我建議您學習如何使用聯接語句,因為它們對於進行更復雜的SQL數據庫查詢非常有用且必不可少。 檢查此鏈接: SQL聯接教程

如果要從SQL中的兩個表中進行選擇,則意味着您有兩個鏈接在一起的表,並且希望將一個表中的一行與另一個表中的一行合並,並獲得一個包含每個表中的列的結果。 例如,您的代碼如下所示:

$query->select(array('#_footable.foo1', '#_footable2.foo2');
$query->from($db->quoteName('#_footbale'));
$query->join($db->quoteName('#_footbale2') . ' on ' $db->quoteName('#_footbale') . '.foo1 == ' . $db->quoteName('#_footbale2') '.foo1');
$query->where($db->quoteName('fooname')." = ".$db->quote($foodata));

您所輸入的內容表明您有兩個具有相同簽名的表,並且希望將它們恢復為相同的結果。 如果是這種情況,那么您需要重組數據庫。 不需要具有相同簽名的兩個表。 將footable2合並為footable。 如果需要區分兩者,則在頁腳中創建另一個列以區分兩者。

Elin提醒我,SQL中有UNION子句。 因此,我將此額外的vit添加到了解決方案中,它更加干凈:

如果您絕對需要兩個具有相同簽名的表,則可以在Joomla中使用並union函數。 您的代碼為:

$query->select(array(foo1,foo2)); 
$query->from($db->quoteName('#__footable'));
$query->where($db->quoteName('fooname')." = ".$db->quote($foodata));

$query2->select(array(foo1,foo2));
$query2->from($db->quoteName('#__footable2'));
$query2->where($db->quoteName('fooname')." = ".$db->quote($foodata));

$query->union($query2);

希望對您有所幫助

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM