SQL Multiple在同一个表上选择

时间:2014-05-02 10:20:08

标签: php mysql sql

我对我的SQL查询感到困惑。

我想做多个选择查询,但所有在一个。每个选择对于同一个表,相同的列但具有不同的条件。

我现在正在使用它:

    /* Ordre d'affichage 1 */
    $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, Diffuseur D WHERE O.INTITULE = ? AND O.REGION = $regions AND O.FONCTION = $fonctions AND O.TYPECONTRAT = $type_contrat AND O.ID_DIFFUSEUR = D.Id AND D.MiseEnAvantOffres = 1 ";
    /* Ordre d'affichage 2 */
    $sql .= "EXCEPT ";
    $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, Diffuseur D WHERE O.REGION = $regions AND O.FONCTION = $fonctions AND O.TYPECONTRAT = $type_contrat AND O.ID_DIFFUSEUR = D.Id AND D.MiseEnAvantOffres = 1 ";
    /* Ordre d'affichage 3 */
    $sql .= "EXCEPT ";
    $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, Diffuseur D WHERE O.FONCTION = $fonctions AND O.TYPECONTRAT = $type_contrat AND O.ID_DIFFUSEUR = D.Id AND D.MiseEnAvantOffres = 1 ";
    /* Ordre d'affichage 4 */   
    $sql .= "EXCEPT ";
    $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, Diffuseur D WHERE O.FONCTION = $fonctions AND O.ID_DIFFUSEUR = D.Id AND D.MiseEnAvantOffres = 1 ";
    /* Ordre d'affichage 5 */
    $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, Diffuseur D WHERE O.INTITULE = ? AND O.REGION = $regions AND O.FONCTION = $fonctions AND O.TYPECONTRAT = $type_contrat ";
    $sql .= "EXCEPT ";
    /* Ordre d'affichage 6 */
    $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, Diffuseur D WHERE O.REGION = $regions AND O.FONCTION = $fonctions AND O.TYPECONTRAT = $type_contrat ";

$ query = $ this-> db-> query($ sql,array($ _ POST ['intitule'],$ _POST ['intitule']));

有没有办法让这更容易和可能? (因为目前除外不起作用)

1 个答案:

答案 0 :(得分:2)

为什么不能将其作为一个长where子句来执行此操作:

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) and
      not (O.REGION = $regions AND O.FONCTION = $fonctions AND O.TYPECONTRAT = $type_contrat AND D.MiseEnAvantOffres = 1) and
      not (O.FONCTION = $fonctions AND O.TYPECONTRAT = $type_contrat AND D.MiseEnAvantOffres = 1) and
      not (O.FONCTION = $fonctions AND D.MiseEnAvantOffres = 1) and
      not (O.INTITULE = ? AND O.REGION = $regions AND O.FONCTION = $fonctions AND O.TYPECONTRAT = $type_contrat) and
      not (O.REGION = $regions AND O.FONCTION = $fonctions AND O.TYPECONTRAT = $type_contrat);

最后两个缺少where子句中的(隐式)连接条件。如果你有问题,那可能就是原因。您应该学会始终使用显式连接。