如何使用joomla从数据库中查询数据
下面是使用JDatabaseQuery类的join
方法,我们可以从多个表中查询数据。iner
方法有两个参数,一个指定链接的类型(inner,outer,left,right
),另外一个是链接的条件。inner
中,我们可以使用所有原生的SQL
关键词,比如AS
对表进行别名,ON
来指定关联。代码如下:
// 得到数据库链接 $db = JFactory::getDbo(); // 创建新的查询对象 $query = $db->getQuery(true); // 查询内容 $query ->select(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 ' . $db->quote('a%')) ->order($db->quoteName('a.created') . ' DESC'); // 设置查询 $db->setQuery($query); // 获得结果 $results = $db->loadObjectList();
上面的join
方法使我们能够查询#__content
表和#__users
表.为了方便使用,对inner
的4种类型进行了封装,分别提供了4个方法:
innerJoin()
leftJoin()
rightJoin()
outerJoin()
我们可以使用多个join
方法来查询两个或者两个以上的表。代码如下:
$query ->select(array('a.*', 'b.username', 'b.name', 'c.*', 'd.*')) ->from($db->quoteName('#__content', 'a')) ->join('INNER', $db->quoteName('#__users', 'b') . ' ON ' . $db->quoteName('a.created_by') . ' = ' . $db->quoteName('b.id')) ->join('LEFT', $db->quoteName('#__user_profiles', 'c') . ' ON ' . $db->quoteName('b.id') . ' = ' . $db->quoteName('c.user_id')) ->join('RIGHT', $db->quoteName('#__categories', 'd') . ' ON ' . $db->quoteName('a.catid') . ' = ' . $db->quoteName('d.id')) ->where($db->quoteName('b.username') . ' LIKE ' . $db->quote('a%')) ->order($db->quoteName('a.created') . ' DESC');
有时候,为了避免字段名的冲突,我们需要用AS对表进行别名或者直接使用$db->quoteName
的第二个参数对表进行别名。代码如下:
$query ->select('a.*') ->select($db->quoteName('b.username', 'username')) ->select($db->quoteName('b.name', '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 ' . $db->quote('a%')) ->order($db->quoteName('a.created') . ' DESC');