php - mysql从查询中获取结果

标签 php mysql select where-clause

我目前在我的网站上运行此查询,

public function searchCandidates($type=null, $gender=null, $age=null)
{
    //die(var_dump($age));
    if($age != false) {
        $age = implode(", %", $age);
    }

    $sql = 'SELECT `candidates`.`candidate_id`, 
                    `candidates`.`first_name`, 
                    `candidates`.`surname`, 
                    `candidates`.`gender`,
                    `candidates`.`DOB`, 
                    `candidates`.`talent`, 
                    `candidates`.`availability`,
                    `candidates`.`youtube_showreel_1`,
                    `candidates`.`youtube_showreel_desc_1`,
                    `candidates`.`date_created`,
                    `candidates`.`new_talent`,
                     DATE_FORMAT(NOW(), "%Y") - DATE_FORMAT(`candidates`.`DOB`, "%Y") - (DATE_FORMAT(NOW(), "00-%m-%d") < DATE_FORMAT(`candidates`.`DOB`, "00-%m-%d")) as `age`,
                    `candidate_assets`.`url`, 
                    `candidate_assets`.`asset_size`,
                    `candidate_assets`.`weight`
            FROM `candidates`
            LEFT JOIN `candidate_assets` ON `candidate_assets`.`candidates_candidate_id` = `candidates`.`candidate_id`
            WHERE `candidates`.`show_on_site` = "urban talent" AND `candidates`.`visible` = "yes" AND `candidate_assets`.`weight` = 1';
            //is there a certain criteria
            if($type != "0") { $sql .= ' AND `candidates`.`talent` LIKE "%'.$type.'%"'; }
            if($age != false) { $sql .= ' AND `candidates`.`playing_age` LIKE "%'.$age.'%"';}
            if($gender != false){ $sql .= ' AND `candidates`.`gender` = "'.$gender.'"'; }

            $sql .= ' GROUP BY `candidates`.`candidate_id` ORDER BY `candidates`.`surname` ASC, `candidate_assets`.`weight` ASC';

    $query = $this->db->query($sql);

    //die(print_r($query->result_array()));

    //echo $this->db->last_query();
    //die();
    return $query->result_array();
}

我正在努力让这个查询按我的意愿工作,我想显示所有结果,无论用户是否有图像(candidate_assets.url) ,但是如果他们确实有图像,那么我只需要显示权重为 1 的图像。目前,我的查询仅返回具有权重为 1 的图像的用户。

我想要的是返回所有用户,如果他们有一个图像(或多张图像),则返回权重为 1 的图像。

我做错了什么?

最佳答案

如果您在 where 子句中使用第二个表中的列,则 LEFT JOIN 没有任何区别。要么允许它们在 where 子句中为 NULL,要么将它们移至 ON 子句:

你有:

LEFT JOIN `candidate_assets` 
ON `candidate_assets`.`candidates_candidate_id` = `candidates`.`candidate_id`
WHERE `candidates`.`show_on_site` = "urban talent" 
AND `candidates`.`visible` = "yes" 
AND `candidate_assets`.`weight` = 1';

做到这一点:

LEFT JOIN `candidate_assets` 
ON `candidate_assets`.`candidates_candidate_id` = `candidates`.`candidate_id`
AND `candidate_assets`.`weight` = 1 /*moved here*/
WHERE `candidates`.`show_on_site` = "urban talent" 
AND `candidates`.`visible` = "yes" 

或者可能(不太“逻辑”)

LEFT JOIN `candidate_assets` 
ON `candidate_assets`.`candidates_candidate_id` = `candidates`.`candidate_id`
WHERE `candidates`.`show_on_site` = "urban talent" 
AND `candidates`.`visible` = "yes" 
AND (`candidate_assets`.`weight` = 1 OR `candidate_assets`.`weight` IS NULL)

现在您将拥有所需的所有行。如果要选择仅选择一张图像(如果有),请让您的应用程序代码处理该图像,或者使用 IF 查询稍微调整一下 SELECT 子句。

关于php - mysql从查询中获取结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10798714/

相关文章:

mysql - 编写sql查询来获取搜索结果

javascript - Jquery多选字段错误

php - SQL Rand() 给出结果集但无法获取结果

mysql - 如何分析时间序列数据并删除 "Duplicate"记录

mysql - 如何将变量传递给存储过程的主体语句?

mysql - 在特定时间段内按 sql 分组显示零

mysql - 从另一个表的另一个字段中选择表中的字段

javascript - 使用带有无限滚动的 ajax 的性能

PHP curl : Manually setting the content-length header

php - 标签的奇怪 HTML 忽略