Php MySQL选择左连接中的最后一个图像
我有这个功能,列出第一个插入的图像和其他数据从住宿数据库Php MySQL选择左连接中的最后一个图像,php,mysql,sql,joomla,Php,Mysql,Sql,Joomla,我有这个功能,列出第一个插入的图像和其他数据从住宿数据库 function getLIST($sort_by,$saved=0,$filter) { $session = JFactory::getSession(); $lang =& JFactory::getLanguage(); $query = "SELECT a.id FROM #__jomholiday_fields AS a where a.name='COM_JOMHOLIDAY_ACCOMOD
function getLIST($sort_by,$saved=0,$filter)
{
$session = JFactory::getSession();
$lang =& JFactory::getLanguage();
$query = "SELECT a.id FROM #__jomholiday_fields AS a where a.name='COM_JOMHOLIDAY_ACCOMODATION_RATING'";
$db = $this->getDbo();
$db->setQuery( $query );
$rating_id = $db->loadResult();
$query = "SELECT a.id FROM #__jomholiday_fields AS a where a.name='COM_JOMHOLIDAY_BOARD_BASIS'";
$db->setQuery( $query );
$board_basis_id = $db->loadResult();
$query = $db->getQuery(true);
$listing_expiry_days=(int)$this->getConf("listing_expiry_days");
if($listing_expiry_days)
{
$now=strtotime("now");
$temp=$now-$listing_expiry_days*(60*60*12);
$toold=date('Y-m-d',$temp);
}
else $toold=0;
$search_mod=0;
$query->select(
$this->getState(
'list.select',
'a.id, a.categories_id, a.number, a.headline, a.short_description, a.lat, a.lon, a.published, a.dpublished' .
', a.featured, a.address_name, a.created, a.modified, p.name , a.price_night, a.price_week, a.sleeps'
)
);
$query->from('#__jomholiday_listings AS a');
$query->select('p.name AS image');
$query->select('MAX(p.id)');
$query->join('LEFT', '#__jomholiday_photos AS p ON p.listings_id = a.id AND (p.rooms_id=0 OR p.rooms_id IS NULL) ');
$query->select('ac.name AS category_name');
$query->select('ac.rental AS price_type');
$query->join('LEFT', '#__jomholiday_categories AS ac ON ac.id = a.categories_id');
$query->where("(ac.lang='".$lang->getTag()."' OR ac.lang='*')");
//$query->where("p.id = MAX(p.id)");
$query->select('AVG(r.rating) AS rating_average');
$query->join('LEFT', '#__jomholiday_reviews AS r ON r.published="1" AND r.listingid=a.id');
if ($rating_id){
$query->select('f1.value AS accomodation_rating');
$query->join('LEFT', '#__jomholiday_listings_to_fields AS f1 ON f1.listings_id = a.id AND f1.fields_id='.$rating_id.'');
}
if ($board_basis_id){
$query->select('f2.value AS all_inclusive');
$query->join('LEFT', '#__jomholiday_listings_to_fields AS f2 ON f2.listings_id = a.id AND f2.fields_id='.$board_basis_id.' and f2.value="COM_JOMHOLIDAY_ALL_INCLUSIVE"');
$query->select('f3.value AS bed_breakfast');
$query->join('LEFT', '#__jomholiday_listings_to_fields AS f3 ON f3.listings_id = a.id AND f3.fields_id='.$board_basis_id.' and f3.value="COM_JOMHOLIDAY_BED_BREAKFAST"');
$query->select('f4.value AS full_board');
$query->join('LEFT', '#__jomholiday_listings_to_fields AS f4 ON f4.listings_id = a.id AND f4.fields_id='.$board_basis_id.' and f4.value="COM_JOMHOLIDAY_FULL_BOARD"');
$query->select('f5.value AS half_board');
$query->join('LEFT', '#__jomholiday_listings_to_fields AS f5 ON f5.listings_id = a.id AND f5.fields_id='.$board_basis_id.' and f5.value="COM_JOMHOLIDAY_HALF_BOARD"');
$query->select('f6.value AS room_only');
$query->join('LEFT', '#__jomholiday_listings_to_fields AS f6 ON f6.listings_id = a.id AND f6.fields_id='.$board_basis_id.' and f6.value="COM_JOMHOLIDAY_ROOM_ONLY"');
$query->select('f7.value AS self_cattering');
$query->join('LEFT', '#__jomholiday_listings_to_fields AS f7 ON f7.listings_id = a.id AND f7.fields_id='.$board_basis_id.' and f7.value="COM_JOMHOLIDAY_SELF_CATTERING"');
}
if ($saved)
{
$cids=JRequest::getString('savedlist', '', 'cookie');
$cid=explode(",",$cids);
JArrayHelper::toInteger($cid);
$cids=implode(",",$cid);
$query->where('a.id IN ( '. $cids .' )');
$search_mod=1;
}
$query->where("a.published='1'");
$query->where("a.approved='1'");
if ($toold) $query->where("a.dpublished>'$toold'");
if ($session->get('jom_zlat')!=null)
{
$lat1=(float)$session->get('jom_lat')-$session->get('jom_zlat');
$lat2=(float)$session->get('jom_lat')+$session->get('jom_zlat');
$lon1=(float)$session->get('jom_lon')-$session->get('jom_zlon');
$lon2=(float)$session->get('jom_lon')+$session->get('jom_zlon');
if ($lat1>$lat2){$temp=$lat1;$lat1=$lat2;$lat2=$temp;}
if ($lon1>$lon2){$temp=$lon1;$lat1=$lon2;$lon2=$temp;}
if ($lat1) $query->where("a.lat>".$lat1);
if ($lat2) $query->where("a.lat<".$lat2);
if ($lon1) $query->where("a.lon>".$lon1);
if ($lon2) $query->where("a.lon<".$lon2);
$search_mod=1;
}
if ($session->get('jom_address_select')!=null)
{
$temp=explode(",",$session->get('jom_address_select'));
if ($temp[0]) $temp1=$this->getRegion((int)$temp[0]);
if ($temp[1]) $temp1.=", ".$this->getRegion((int)$temp[1]);
if ($temp[2]) $temp1.=", ".$this->getRegion((int)$temp[2]);
$query->where("(a.address_name like '%".str_replace("'","\'",$temp1)."%')", ENT_QUOTES);
$search_mod=1;
}
if (str_replace(",","",$session->get('jom_booking')))
{
$temp=explode(",",$session->get('jom_booking'));
if ($temp[0] && $temp[2]>0)
{
$in=strtotime($temp[0]);
$out=strtotime($temp[1]);
$query->where("a.sleeps >= '".(int)$temp[2]."'");
while ($in<$out)
{
$query->where("(a.booking LIKE '%,".date("ymd",$in)."-".(int)$temp[2].",%' OR a.booking NOT LIKE '%,".date("ymd",$in)."-%' OR a.booking IS NULL)");
$in=strtotime('+1 day', $in);
}
}
$search_mod=1;
}
if ((int)$session->get('jomholiday_search_cat'))
{
$temp=explode(",",$session->get('jomholiday_search_cat'));
JArrayHelper::toInteger($temp);
$cidss = implode( ',', $temp );
$query->where("a.categories_id IN ( ". $cidss ." )");
$search_mod=1;
}
if ($session->get('jom_title')!=null){$search_mod=1; $query->where("(a.headline like '%".str_replace("'","\'",$session->get('jom_title'))."%' OR a.address_name like '%".str_replace("'","\'",$session->get('jom_title'))."%')", ENT_QUOTES);}
if ((int)$session->get('jom_pricemin')!=null){$search_mod=1; $query->where("a.price_night>=".(int)$session->get('jom_pricemin'));}
if ((int)$session->get('jom_pricemax')!=null) {$search_mod=1;$query->where("a.price_night<=".(int)$session->get('jom_pricemax'));}
if ($session->get('jomholiday_search'))
{
$val=json_decode($session->get('jomholiday_search'),true);
if (is_array($val))
{
$array_keys = array_keys($val);
foreach($array_keys as $key) if ($val[$key]!=null)
{
if (is_array($val[$key]))
{
$array_keys1 = array_keys($val[$key]);
foreach($array_keys1 as $key1)
{
$val[$key][$key1]=htmlspecialchars($val[$key][$key1],ENT_QUOTES);
$query->where('exists(select 1 from #__jomholiday_listings_to_fields AS fs'.$key.'_'.$key1.' where fs'.$key.'_'.$key1.'.listings_id = a.id AND fs'.$key.'_'.$key1.'.value="'.$val[$key][$key1].'" and fs'.$key.'_'.$key1.'.fields_id='.$key.')');
}
}
else if (trim($val[$key])!=null)
{
$val[$key]=htmlspecialchars(trim($val[$key]),ENT_QUOTES);
$query->where('exists(select 1 from #__jomholiday_listings_to_fields AS fs'.$key.' where fs'.$key.'.listings_id = a.id AND fs'.$key.'.value="'.$val[$key].'" and fs'.$key.'.fields_id='.$key.')');
}
}
$search_mod=1;
}
}
if ((int)JRequest::getVar('cid') && !$search_mod) $query->where("a.categories_id='".(int)JRequest::getVar('cid')."'");
if ((int)$session->get('jom_pricemin_f')!=null) $query->where("a.price_night>=".(int)$session->get('jom_pricemin_f'));
if ((int)$session->get('jom_pricemax_f')!=null) $query->where("a.price_night<=".(int)$session->get('jom_pricemax_f'));
if ($session->get('jomholiday_filter'))
{
$val=json_decode($session->get('jomholiday_filter'),true);
if (is_array($val))
{
$array_keys = array_keys($val);
foreach($array_keys as $key) if ($val[$key]!=null)
{
if (is_array($val[$key]))
{
$array_keys1 = array_keys($val[$key]);
foreach($array_keys1 as $key1)
{
$val[$key][$key1]=htmlspecialchars($val[$key][$key1],ENT_QUOTES);
$query->where('exists(select 1 from #__jomholiday_listings_to_fields AS fsf'.$key.'_'.$key1.' where fsf'.$key.'_'.$key1.'.listings_id = a.id AND fsf'.$key.'_'.$key1.'.value="'.$val[$key][$key1].'" and fsf'.$key.'_'.$key1.'.fields_id='.$key.')');
}
}
else if (trim($val[$key])!=null)
{
$val[$key]=htmlspecialchars(trim($val[$key]),ENT_QUOTES);
$query->where('exists(select 1 from #__jomholiday_listings_to_fields AS fsf'.$key.' where fsf'.$key.'.listings_id = a.id AND fsf'.$key.'.value="'.$val[$key].'" and fsf'.$key.'.fields_id='.$key.')');
}
}
}
}
if ($session->get('jom_address')!=null) $query->where("a.address_name like '".str_replace("'","\'",$session->get('jom_address'))."%'", ENT_QUOTES);
$query->group("a.id");
if ($this->getState('sort_by')=="a.created DESC") $order_s=$this->getState('sort_by');
elseif ($this->getState('sort_by')=="a.modified DESC") $order_s=$this->getState('sort_by');
elseif ($this->getState('sort_by')=="a.price_night DESC") $order_s=$this->getState('sort_by');
elseif ($this->getState('sort_by')=="a.price_night") $order_s=$this->getState('sort_by');
elseif ($this->getState('sort_by')=="a.headline") $order_s=$this->getState('sort_by');
else $order_s="";
if ($this->getConf(premium_first))
{
if ($order_s && JRequest::getVar('task')!='rss') $query->order("a.featured desc, ".$order_s.",id desc");
else $query->order("a.featured desc, a.created DESC, id desc");
}
else
{
if ($order_s && JRequest::getVar('task')!='rss') $query->order($order_s.",id desc");
else $query->order("a.created DESC, id desc");
}
if ($saved || JRequest::getVar('task')=='rss') $data = $this->_getList($query);
else $data = $this->_getList($query, $this->getState('limitstart'), $this->getState('limit'));
//echo $query;
return $data;
}
“p.name”从“jomholiday照片”检索firs记录。我需要每个列表的最后一个 我找到了通过替换此代码来获取最后一张图像的方法:
$query->join('LEFT', '#__jomholiday_photos AS p ON p.listings_id = a.id AND (p.rooms_id=0 OR p.rooms_id IS NULL) ');
关于这一点:
$query->join('LEFT', '( SELECT MAX(id) as maxpid , name, listings_id, rooms_id FROM #__jomholiday_photos GROUP BY id ORDER BY id DESC) AS p ON p.listings_id = a.id AND (p.rooms_id=0 OR p.rooms_id IS NULL) ');
这真的很难理解,如果可能的话,你应该改用API。当您直接在phpmyadmin或其他任何地方运行生成的查询时,是否每个查询都能正常工作?是的,所有查询都能正常工作,但是uu jomholiday_photos有多个图像,我需要检索最后一个插入的代码,而不是第一个。不,我真的看不见,因为大约有80行未注释的代码,我甚至不知道从哪里开始查找您所引用的代码。我真的鼓励你们总是在条件句周围使用花括号,即使它们只是一行,否则就要失败了。如果我是你,我会$query->在phpmyadmin中转储和测试。另外,如果你要继续在查询中重复使用相同的变量名,你需要在两者之间清除$query->。我为错误的代码感到抱歉。这是来自一个插件jomholiday joomla。他们没有对功能进行编程,为每个住宿区选择主图像。所以我想修改代码,这样上传的每一张图片都是主图片。我只需要用MAXid检索图像
$query->join('LEFT', '( SELECT MAX(id) as maxpid , name, listings_id, rooms_id FROM #__jomholiday_photos GROUP BY id ORDER BY id DESC) AS p ON p.listings_id = a.id AND (p.rooms_id=0 OR p.rooms_id IS NULL) ');