我对我的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']));
有没有办法让这更容易和可能? (因为目前除外不起作用)
答案 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
子句中的(隐式)连接条件。如果你有问题,那可能就是原因。您应该学会始终使用显式连接。