Joomla 從多單表查詢數(shù)據(jù)

2023-03-10 11:14 更新

如何使用joomla從數(shù)據(jù)庫中查詢數(shù)據(jù)

從多單表中查詢數(shù)據(jù)

下面是使用JDatabaseQuery類的join方法,我們可以從多個表中查詢數(shù)據(jù)。iner方法有兩個參數(shù),一個指定鏈接的類型(inner,outer,left,right),另外一個是鏈接的條件。inner中,我們可以使用所有原生的SQL關(guān)鍵詞,比如AS對表進(jìn)行別名,ON來指定關(guān)聯(lián)。代碼如下:

// 得到數(shù)據(jù)庫鏈接
$db = JFactory::getDbo();
 
// 創(chuàng)建新的查詢對象
$query =$db->getQuery(true);
 
// 查詢內(nèi)容
$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');
 
// 設(shè)置查詢
$db->setQuery($query);
 
// 獲得結(jié)果
$results =$db->loadObjectList();

上面的join方法使我們能夠查詢#__content表和#__users表.為了方便使用,對inner的4種類型進(jìn)行了封裝,分別提供了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對表進(jìn)行別名或者直接使用$db->quoteName的第二個參數(shù)對表進(jìn)行別名。代碼如下:

$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');

 


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號