如何在Joomla数据库/ Seblod中选择(连接)多个表


How to select (connect with) multiples tables in Joomla database / Seblod

我已经使用joomla的组件SEBLOD创建了一个表单,没关系,我可以正确查看输入的数据,但我想操作数据,但是我无法连接到数据库,所以我尝试了这个:

<?php
defined( '_JEXEC' ) or die;

$catId = 11;
$catId2 = 12;
$sql = "SELECT * FROM #__cck_store_form_add_compras";
$con = &JFactory::getDBO();
$con->setQuery($sql);
$resultado = $con->loadObjectList();

$query = "SELECT * FROM #__content WHERE catid ='" . $catId . "' OR catid ='" .  $catId2 . "'";
$db = JFactory::getDBO();
$db->setQuery($query);
$articles = $db->loadObjectList();
foreach($articles as $article){
echo '<br/><br/>ID:'. $article->id
.'<br/>Titulo: '. $article->title
.'<br/>Quantidade Comprada: '.$resultado[0]->add_compras_quantidade_comprada
.'<br/>Unidade de Medida: '.$resultado[0]->add_compras_unidade_de_medida
.'<br/>Preço Por Kilo/Unidade: '.$resultado[0]->add_compras_preco_por_unidade_kilo
.'<br/>Data da Compra: '.$resultado[0]->add_compras_data_da_compra
.'<br/>Total da Compra: '.$resultado[0]->add_compras_total_da_compra
.'<br/>Local da Compra: '.$resultado[0]->add_compras_local_da_compra
;
}
?>

我想要的是获取保存在表 #__content 中的文章 id、文章名称、文章类别以及保存在表 #__cck_store_form_add_compras 中的其他字段,但仅限于类别 ID = 11 或类别 ID = 12 的文章

当我使用此代码(上面)时,我看到结果,但是其中一些似乎重复。

.

当我在下面使用它时,我只看到文章和文章名称的 id,但我看不到其他字段:

$catId = 11;
$catId2 = 12;
$query = "SELECT * FROM #__content WHERE catid ='" . $catId . "' OR catid ='" . $catId2 . "'";
$db = JFactory::getDBO();
$db->setQuery($query); 
$articles = $db->loadObjectList(); 

.

如果我使用以下代码,我只能看到其他字段,但我看不到文章的 ID 和文章的名称:

$sql = "SELECT * FROM #__cck_store_form_add_compras";
$con = &JFactory::getDBO();
$con->setQuery($sql);
$resultado = $con->loadObjectList();

.

查看文档,我发现了这段代码:

// Get a db connection.
$db = JFactory::getDbo();
// Create a new query object.
$query = $db->getQuery(true);
// Select all articles for users who have a username which starts with 'a'.
// Order it by the created date.
// Note by putting 'a' as a second parameter will generate `#__content` AS `a`
$query
 ->select($db->quoteName(array('a.*', 'b.username', 'b.name')))
 ->from($db->quoteName('#__content', 'a'))
 ->join('INNER', $db->quoteName('#__users', 'b') . ' ON (' . $db->quoteName('a.created_by') . ' = ' . $db->quoteName('b.id') . ')')
 ->where($db->quoteName('b.username') . ' LIKE ''a%''')
 ->order($db->quoteName('a.created') . ' DESC');
// Reset the query using our newly populated query object.
$db->setQuery($query);
// Load the results as a list of stdClass objects (see later for more options on retrieving data).
$results = $db->loadObjectList();

我认为这正是我所需要的,但我不知道如何才能更改为适合我的需求,有人可以帮助我吗?

对不起,我的英语不好,我正在使用谷歌翻译来帮助我。

显示 SEBLOD 内容过滤列表的最佳方法是使用 SEBLOD

搜索并通过菜单项、模块或 SEBLOD 内容(使用 CCK 模块或 CCK 列表字段)显示它。在您的 SEBLOD 搜索中,您可以将"文章类别 ID"设置为过滤器,并将"11,12"作为默认值,以便仅检索这 2 个类别中的文章。

请在SEBLOD论坛上找到您问题的完整答案 http://www.seblod.com/community/forums/general-discussions/connecting-to-database#post22181

谢谢。塞巴斯蒂安。

使用 JTable::getInstance("content"); 您可以从 Joomla 内容表中获取数据,并将 SEBLOD 内容留给查询。

例:

$query = "SELECT * FROM #__cck_store_form_produto";
$db = &JFactory::getDBO();
$db->setQuery($query);
$values = $db->loadObjectList();
foreach($values as $val){
echo $val->id; // The article ID is inside SEBLOD table too.
echo $val->your_field; // will write the value on a SEBLOD field called "your_field"
// now to get joomla values 
$maindata =& JTable::getInstance("content");
$maindata->load($val->id);
echo $maindata->title; //will write article title
echo $maindata->alias; //will write article alias
echo $maindata->catid; //will write article Category ID
}

或者您也可以在两个表之间使用"INNER JOIN",只需使用 ID 链接值即可:

https://www.w3schools.com/sql/sql_join_inner.asp