Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql SQL在何处提取条件顺序_Mysql_Sql - Fatal编程技术网

Mysql SQL在何处提取条件顺序

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,

大家好,

我正在尝试一种方法,以特定的顺序*显示使用mysql SELECT query选择的所有数据,所有这些数据都显示在一个或多个查询中,但越少越好

此顺序为:第一,其中条件=需要显示的第一个结果

第二个where条件=第二个结果,直到where条件结束

我希望这是清楚的

这是我的密码:

    $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”附近使用的正确语法