Mysql连接两个表where子句

时间:2014-12-10 20:10:01

标签: php mysql select join

所以我根据用户选择国家/地区,日期等的表单列出了一些活动。 有两个表,主要表" actividades"我有名字,价格,参与人数等等,然后我有" tarifas"我在哪里为活动制定了特殊规则,例如,如果在特定的一天,活动是否可用。可能有规则与否,如果没有任何规则,我想列出该活动,如果有规则,我只想在那天可用时列出它,这就是tarifas.fechado应该做= 0。

其他一切正常,有人可以帮我解决这个问题吗?

if (!$sql = $db->sql_query("SELECT actividades.dias, actividades.id_pais, actividades.id_regiao, actividades.nome, actividades.id_empresa, actividades.id, actividades.dias, actividades.preco, actividades.id_subcategoria, actividades.hora 
                            FROM actividades 
                            LEFT JOIN tarifas ON actividades.id = tarifas.id_actividade 
                                              AND tarifas.dia = '$dia' 
                                              AND tarifas.fechado = 0 
                            WHERE pais = '$pais' 
                            AND actividades.dias LIKE '%$diaExtenso%' 
                            ORDER BY actividades.id ASC 
                            LIMIT $pageLimit, $porpagina")) 
       {message_die("DS", TRUE); }

1 个答案:

答案 0 :(得分:0)

我认为你的一些连接条件需要在WHERE子句中。我不清楚tarifas.dia如何适应图片,但此查询将返回所有没有相关actividades行的tarifas行,以及所有具有tarifas行的行tarifas.dia具有指定值且tarifas.fechado为零的行。 (我已将其格式化为可读性):

SELECT
  actividades.dias,
  actividades.id_pais,
  actividades.id_regiao,
  actividades.nome,
  actividades.id_empresa,
  actividades.id,
  actividades.dias,
  actividades.preco,
  actividades.id_subcategoria,
  actividades.hora
FROM
  actividades
  LEFT JOIN tarifas
    ON actividades.id = tarifas.id_actividade
WHERE
  pais = '$pais'
  AND actividades.dias LIKE '%$diaExtenso%'
  AND (tarifas.id_actividade IS NULL
    OR (tarifas.dia = '$dia' AND tarifas.fechado = 0))
ORDER BY actividades.id ASC
LIMIT $pageLimit, $porpagina

您可能希望将tarifas.dia上的条件移回连接谓词。这样做会导致tarifas行被忽略,除非它们具有指定的dia值。