Php MySQL按多列排序,结果不一
假设我想按3列获取数据和顺序 我目前有:Php MySQL按多列排序,结果不一,php,mysql,Php,Mysql,假设我想按3列获取数据和顺序 我目前有: ORDER BY e.HomePage DESC, e.FeaturedProfile DESC, e.DateModified DESC 这将返回首页第一个,然后是FeaturedProfile第二个,这些和其余的结果按DateModified排序。一些配置文件既不是主页也不是FeaturedProfile,因此它们将显示在下面,并仅按DateModified排序 我希望第一个结果是由DateModified排序的HomePage和Featured
ORDER BY e.HomePage DESC, e.FeaturedProfile DESC, e.DateModified DESC
这将返回首页第一个,然后是FeaturedProfile第二个,这些和其余的结果按DateModified排序。一些配置文件既不是主页也不是FeaturedProfile,因此它们将显示在下面,并仅按DateModified排序
我希望第一个结果是由DateModified排序的HomePage和FeaturedProfile的组合,然后是下面既不是HomePage也不是FeaturedProfile的任何其他结果
理想情况下,我想在一个查询内完成这一切
编辑:
以下是完整的query inc php代码+为了便于阅读,我已替换了绑定变量:
HomePage和FeaturedProfile的字段是布尔值
这是我的主要搜索功能,很抱歉,它太大了
理想情况下,我希望返回所有结果,但如果主页和FeaturedProfile=1,我希望首先返回这些结果,然后返回下面的任何结果。我希望主页和FeaturedProfile可以混合在一起,但仍然高于其他结果。我可以用两个查询来完成这项工作,但我希望用一个查询来实现整洁
$query = "SELECT DISTINCT e.EscortID,
e.EscortName,
e.EscortEmail,
e.EscortTelephone,
e.EscortWebsite,
e.InCallLocation,
e.HairColour,
g.GenderDescription,
n.NationalityName,
et.EthnicityName,
((date_format(now(),'%Y') - date_format(e.DateOfBirth,'%Y')) - (date_format(now(),'00-%m-%d') < date_format(e.DateOfBirth,'00-%m-%d'))) AS Age,
SUBSTRING_INDEX(e.EscortProfile,' ', 24) AS Description,
p.PhotoAlt,
p.PhotoURL,
e.ShowReviews
FROM tEscort e
INNER JOIN tEscortArea ea ON e.EscortID = ea.tEscort_EscortID
INNER JOIN tEthnicity et ON e.tEthnicity_EthnicityID = et.EthnicityID
INNER JOIN tNationality n ON e.tNationality_NationalityID = n.NationalityID
INNER JOIN tGender g ON e.tGender_GenderID = g.GenderID AND g.Enabled=1
LEFT JOIN tEscortAgency eag ON e.EscortID = eag.tEscort_EscortID
LEFT JOIN tAgency a ON a.AgencyID = eag.tAgency_AgencyID
LEFT JOIN (tEscortPhoto ep INNER JOIN tPhoto p ON (ep.tPhoto_PhotoID = p.PhotoID AND p.Enabled=1))
ON e.EscortID = ep.tEscort_EscortID AND ep.ProfilePhoto = 1
LEFT JOIN (tEscortEnjoyments ee INNER JOIN tEnjoyment en ON (ee.tEnjoyment_EnjoymentID = en.EnjoymentID AND en.Enabled=1))
ON e.EscortID = ee.tEscort_EscortID
LEFT JOIN (tEscortServices es INNER JOIN tService s ON (s.ServiceID = es.tService_ServiceID AND s.Enabled=1))
ON e.EscortID = es.tEscort_EscortID
WHERE e.Enabled=1
AND e.Active=1
AND e.AvctivePayments=1";
if(!empty($areas)){$query .= " AND ea.tArea_AreaID IN($areas)";}
if(!empty($enjoyments)){$query .= " AND ee.tEnjoyment_EnjoymentID IN($enjoyments)";}
if(!empty($ethnicities)){$query .= " AND e.tEthnicity_EthnicityID IN($ethnicities)";}
if(!empty($genders)){$query .= " AND e.tGender_GenderID IN($genders)";}
if(!empty($nationalities)){$query .= " AND e.tNationality_NationalityID IN($nationalities)";}
if(!empty($services)){$query .= " AND es.tService_ServiceID IN($services)";}
if(!empty($hair)){$query .= " AND e.HairColour LIKE '%$hair%'";}
if(!empty($braSize)){$query .= " AND e.tGender_GenderID != 1 AND e.BraSize IS NOT NULL AND e.BraSize REGEXP '$braSize'";}
if(!empty($dressSize)){$query .= " AND e.tGender_GenderID != 1 AND e.DressSize IS NOT NULL AND e.DressSize >= $dressSize";}
if(!empty($escortType))
{
switch ($escortType)
{
case 'Agency' :
$query .= " AND eag.tAgency_AgencyID IS NOT NULL ";
break;
case 'Independent' :
$query .= " AND eag.tAgency_AgencyID IS NULL";
break;
}
}
if(!empty($ageFrom) && !empty($ageTo)){
$i = 0;
$query .= " AND (";
foreach($ageFrom as $from) {
if($i > 0 ){
$query .= " OR ";
}
$query .= " e.DateOfBirth BETWEEN '$ageTo[$i]' AND '$from' ";
$i++;
}
$query .= " ) ";
}
if(!empty($breasts)){
$i = 0;
$query .= " AND (";
foreach($breasts as $cupSize) {
if($i > 0 ){
$query .= " OR ";
}
$query .= " e.BraSize IS NOT NULL AND e.BraSize REGEXP '$cupSize' ";
$i++;
}
$query .= " ) ";
}
if(!empty($incallAreas)){
$i = 0;
$query .= " AND (";
foreach($incallAreas as $incallArea) {
if($i > 0 ){
$query .= " OR ";
}
$incallAreaSub = substr($incallArea, 0, 5);
$query .= " e.InCallLocation IS NOT NULL AND (e.InCallLocation LIKE '%$incallArea%' OR e.InCallLocation LIKE '%$incallAreaSub%') ";
$i++;
}
$query .= " ) ";
}
if(!empty($freeText)){ $query .= " AND (e.EscortName LIKE '%$freeText%' OR a.AgencyName LIKE '%$freeText%')"; }
switch ($orderBy)
{
case 'created' :
$query .= " ORDER BY e.DateCreated DESC";
break;
case 'age' :
$query .= " ORDER BY e.DateOfBirth DESC";
break;
case 'popularity' :
$query .= " ORDER BY e.ViewCount DESC";
break;
default :
$query .= " ORDER BY e.DateModified DESC";
break;
}
$query .= " LIMIT $start, $pageSize";
我不明白。主页和功能配置文件是布尔字段吗?@NielsKeurentjes是的,我也不明白:-。我想主要的订单是按日期修改的,但为了让主页和功能配置文件位于顶部,我将它们添加到订单中,但我希望它们混合在一起。对不起,如果我没有很好地解释我自己。嗯,不,我仍然不明白这个问题。如果您提供一些示例输入和输出,并了解数据库表的外观,可能会有所帮助。谢谢,我会重新思考我是如何做到这一点的。我可以用两个查询来完成它,但我试图用一个查询来完成它。当我了解更多信息时,我会发回:-+我会将完整查询添加到OP