簡體   English   中英

將數組值添加到where子句

[英]adding array value to a where clause

與此代碼..我需要將$ code變量添加到sql查詢的where子句。

if ( isset( $_POST['code_search_submitted'])) {

        if ( isset( $_POST['searchCode']) && !empty( $_POST['searchText'])) {           


    $searchCode = $_POST['searchCode']; 
        $searchText = $_POST['searchText'];     

        echo $searchCode;
        echo '<br />';
        echo $searchText;
        //if (is_numeric( $searchText ) && (strlen($searchText) == 4)) {    

        $numbers = explode(",", $searchText);
        foreach($numbers as $number) {
            $numbers =  trim($number);


            if (ctype_digit($numbers) && (strlen($numbers) == 4)) { 

                $code = $numbers ;

            } else {

                echo 'Can not cantain string and more than 4 digists number';
            }

        }
}
}

這是我的查詢...

SELECT 
    tcs.tutor_id AS tid, 
    t.qualification,
    GROUP_CONCAT( DISTINCT o.option_name SEPARATOR ', ') AS tutor_option, 
    timg.image_name AS img, 
    city_name AS city,
    d.district_name AS district
FROM tutor_category_subject as tcs
    INNER JOIN subject AS s ON tcs.subject_id = s.subject_id
    INNER JOIN tutors AS t ON tcs.tutor_id = t.tutor_id
    INNER JOIN address ON address.address_id = t.address_id
    INNER JOIN city ON city.city_id = address.city_id
    INNER JOIN district AS d ON d.district_id = city.district_id
    LEFT JOIN tutor_images AS timg ON timg.tutor_id = tcs.tutor_id AND timg.image_type = 'profile'
WHERE t.tutor_code = ------------
GROUP BY tcs.tutor_id;

$ code變量具有更多的會員代碼,例如2434、2345、5345、2354等,有人可以告訴我如何在我的where子句中使用它嗎?

謝謝...

if ( isset( $_POST['code_search_submitted'])) {

        if ( isset( $_POST['searchCode']) && !empty( $_POST['searchText'])) {           


    $searchCode = $_POST['searchCode']; 
        $searchText = $_POST['searchText'];     

        echo $searchCode;
        echo '<br />';
        echo $searchText;
        //if (is_numeric( $searchText ) && (strlen($searchText) == 4)) {    

        $numbers = explode(",", $searchText);

        $countmax=count($numbers)-1;

        foreach($numbers as $key=>$number) {
            $numbers =  trim($number);


            if (ctype_digit($numbers) && (strlen($numbers) == 4)) { 
                if($key==$countmax)
                {
                $code .= "t.tutor_code='".$number."'" ;
                }
                else
                {
                $code .= "t.tutor_code='".$number."' || " ;
                }

            } else {

                echo 'Can not cantain string and more than 4 digists number';
            }

        }
}
}


/////////////////////////////////////
//Query Updated
/////////////////////////////////


SELECT 
    tcs.tutor_id AS tid, 
    t.qualification,
    GROUP_CONCAT( DISTINCT o.option_name SEPARATOR ', ') AS tutor_option, 
    timg.image_name AS img, 
    city_name AS city,
    d.district_name AS district
FROM tutor_category_subject as tcs
    INNER JOIN subject AS s ON tcs.subject_id = s.subject_id
    INNER JOIN tutors AS t ON tcs.tutor_id = t.tutor_id
    INNER JOIN address ON address.address_id = t.address_id
    INNER JOIN city ON city.city_id = address.city_id
    INNER JOIN district AS d ON d.district_id = city.district_id
    LEFT JOIN tutor_images AS timg ON timg.tutor_id = tcs.tutor_id AND timg.image_type = 'profile'
WHERE 1=1 && ( $code ) 
GROUP BY tcs.tutor_id;
Updated code for query:

$query="SELECT 
    tcs.tutor_id AS tid, 
    t.qualification,
    GROUP_CONCAT( DISTINCT o.option_name SEPARATOR ', ') AS tutor_option, 
    timg.image_name AS img, 
    city_name AS city,
    d.district_name AS district
FROM tutor_category_subject as tcs
    INNER JOIN subject AS s ON tcs.subject_id = s.subject_id
    INNER JOIN tutors AS t ON tcs.tutor_id = t.tutor_id
    INNER JOIN address ON address.address_id = t.address_id
    INNER JOIN city ON city.city_id = address.city_id
    INNER JOIN district AS d ON d.district_id = city.district_id
    LEFT JOIN tutor_images AS timg ON timg.tutor_id = tcs.tutor_id AND timg.image_type = 'profile'
WHERE 1=1";
if($code!="")
{
$query.=" && ( $code ) ";
}
$query.="GROUP BY tcs.tutor_id";

您可以使用array_map轉換/處理每個值,然后將它們組合回去並使用in子句:

$numbers = explode(",", $searchText);
$parsed = array_map(function ($a) {
   if (ctype_digit($a) && (strlen($a) == 4)) { 
        return "'$a'" ;
    } else {
        echo 'Can not cantain string and more than 4 digists number';
    }
},
$numbers);

$numbers = '(' . preg_replace('/\,+/', ',',implode(',', $parsed)) . ')';

接着

SELECT 
    tcs.tutor_id AS tid, 
    t.qualification,
    GROUP_CONCAT( DISTINCT o.option_name SEPARATOR ', ') AS tutor_option, 
    timg.image_name AS img, 
    city_name AS city,
    d.district_name AS district
FROM tutor_category_subject as tcs
    INNER JOIN subject AS s ON tcs.subject_id = s.subject_id
    INNER JOIN tutors AS t ON tcs.tutor_id = t.tutor_id
    INNER JOIN address ON address.address_id = t.address_id
    INNER JOIN city ON city.city_id = address.city_id
    INNER JOIN district AS d ON d.district_id = city.district_id
    LEFT JOIN tutor_images AS timg ON timg.tutor_id = tcs.tutor_id AND timg.image_type = 'profile'
WHERE t.tutor_code IN $numbers
GROUP BY tcs.tutor_id;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM