Mysql SQL在何处提取条件顺序
大家好, 我正在尝试一种方法,以特定的顺序*显示使用mysql SELECT query选择的所有数据,所有这些数据都显示在一个或多个查询中,但越少越好 此顺序为:第一,其中条件=需要显示的第一个结果 第二个where条件=第二个结果,直到where条件结束 我希望这是清楚的 这是我的密码:Mysql SQL在何处提取条件顺序,mysql,sql,Mysql,Sql,大家好, 我正在尝试一种方法,以特定的顺序*显示使用mysql SELECT query选择的所有数据,所有这些数据都显示在一个或多个查询中,但越少越好 此顺序为:第一,其中条件=需要显示的第一个结果 第二个where条件=第二个结果,直到where条件结束 我希望这是清楚的 这是我的密码: $sql= "SELECT O.INTITULE, O.ENTREPRISENOM, O.TYPECONTRAT, O.DATEDEBUT, O.DATEINSERTION, O.REGION,
$sql= "SELECT O.INTITULE, O.ENTREPRISENOM, O.TYPECONTRAT, O.DATEDEBUT, O.DATEINSERTION, O.REGION,
O.FONCTION, O.ID_DIFFUSEUR, D.Id, D.MiseEnAvantOffres
FROM OffreEmploi O join
Diffuseur D
on O.ID_DIFFUSEUR = D.Id
WHERE (O.INTITULE = ? AND O.REGION = $regions AND O.FONCTION = $fonctions AND O.TYPECONTRAT = $type_contrat AND D.MiseEnAvantOffres = 1 )
OR (O.REGION = $regions AND O.FONCTION = $fonctions AND O.TYPECONTRAT = $type_contrat AND D.MiseEnAvantOffres = 1 )
OR (O.FONCTION = $fonctions AND O.TYPECONTRAT = $type_contrat AND D.MiseEnAvantOffres = 1 )
OR (O.FONCTION = $fonctions AND D.MiseEnAvantOffres = 1 )
OR (O.INTITULE = ? AND O.REGION = $regions AND O.FONCTION = $fonctions AND O.TYPECONTRAT = $type_contrat )
OR (O.REGION = $regions AND O.FONCTION = $fonctions AND O.TYPECONTRAT = $type_contrat )";
$query = $this->db->query($sql,array($_POST['intitule'],$_POST['intitule']));
if ($query->num_rows() > 0)
{
$html = '<div class="resultats">';
foreach ($query->result_array() as $row)
{
$html .= '<p>'.$row['INTITULE'].'</p>';
$html .= '<p>'.$row['ENTREPRISENOM'].'-'.$row['TYPECONTRAT'].'</p>';
$html .= '<p>Date de début : '.$row['DATEDEBUT'].'</p>';
$html .= '<p>Offre publiée le '.$row['DATEINSERTION'].'</p>';
}
$html .= '</div>';
}
return $html;
}
我希望这些结果显示一次,而不是两次或更多
我做了几项研究,但我真的不知道如何做到这一点。使用UNION运算符组合不同WHERE条件给出的结果集 创建一个额外的列ordBY,并根据决定排序顺序的WHERE条件为其赋值
SELECT <columnList> , 1 as ordBy
FROM tableName
JOIN<condition>
WHERE <condition1>
UNION
SELECT <columnList> , 2 as ordBy
FROM tableName
JOIN <condition>
WHERE <condition2>
ORDER BY ordBy
注
您必须仅在最后一个WHERE条件的末尾应用ORDER BY子句。一种方法是使用子查询来标识满足的条件:
SELECT O.INTITULE, O.ENTREPRISENOM, O.TYPECONTRAT, O.DATEDEBUT, O.DATEINSERTION, O.REGION,
O.FONCTION, O.ID_DIFFUSEUR, D.Id, D.MiseEnAvantOffres,
(case when (O.INTITULE = ? AND O.REGION = $regions AND O.FONCTION = $fonctions AND O.TYPECONTRAT = $type_contrat AND D.MiseEnAvantOffres = 1 )
then 1
when (O.REGION = $regions AND O.FONCTION = $fonctions AND O.TYPECONTRAT = $type_contrat AND D.MiseEnAvantOffres = 1 )
then 2
when (O.FONCTION = $fonctions AND O.TYPECONTRAT = $type_contrat AND D.MiseEnAvantOffres = 1 )
then 3
when (O.FONCTION = $fonctions AND D.MiseEnAvantOffres = 1 )
then 4
when (O.INTITULE = ? AND O.REGION = $regions AND O.FONCTION = $fonctions AND O.TYPECONTRAT = $type_contrat )
then 5
when (O.REGION = $regions AND O.FONCTION = $fonctions AND O.TYPECONTRAT = $type_contrat
then 6
end) as whichWhere
FROM OffreEmploi O join
Diffuseur D
on O.ID_DIFFUSEUR = D.Id
HAVING whichWhere is not null
ORDER BY whichWhere;
注意:这会在查询输出中保留排序列。顺便说一句,如果UNION ALL适合您的条件,那么速度会快得多;请查看与MySQL服务器版本对应的手册,以了解在第14行的“then 6 END”附近使用的正确语法