Найти мудрый идентификаторы массива из идентификаторов, разделенных запятыми в MySQL PHP

php mysql

460 просмотра

6 ответа

8 Репутация автора

у меня есть одна таблица, которая содержит несколько разделенных запятыми идентификаторов с несколькими полями, такими как:

введите описание изображения здесь

мне нужен какой-то proid, который я уже прошел, используя массив в MySQL

proid = array([0]=>51,[1]=>54,[2]=>8)

я хочу, чтобы строки, которые содержат 51,54 & 8 proidиз поля таблицы, которая находится в запятых отдельные проиды

51,52,53,54,2,3,4,5,8,9,11,55,13,14,15,16,17,18,1,... 

здесь я пытаюсь, FIND_IN_SETно не работает должным образом в запросе выбора, см. ниже

SELECT * FROM `tbl_request` WHERE FIND_IN_SET('51,54,8', `proid`) > 0

кто-нибудь может мне помочь, пожалуйста,

заранее спасибо

Автор: Amit Источник Размещён: 19.07.2016 06:41

Ответы (6)


0 плюса

1198 Репутация автора

Решение

Функция FIND_IN_SET () принимает первый параметр как полную строку и сравнивает его со вторыми параметрами. Если вы передадите 51 в качестве первого параметра, SQL вернет вам результаты. Но вы попробуйте '51, 8', тогда он будет обрабатываться как одна строка, а не две, и будет искать полные '51, 8'. Так что нужно, как упоминал Джоти в комментариях

SELECT FIND_IN_SET('51', `proid`) > 0 or FIND_IN_SET('54', `proid`) > 0 or FIND_IN_SET('8', `proid`) > 0; 

Ссылка: http://dev.mysql.com/doc/refman/5.7/en/string-functions.html#function_find-in-set , http://www.w3resource.com/mysql/string-functions/mysql- FIND_IN_SET-function.php

$sql = 'SELECT * FROM `tbl_request` WHERE ';
$items = array(51,54,8);
foreach($items as $item){
    $where[] = "FIND_IN_SET('$item', `proid`) > 0";
}
if(is_array($where)){
    $sql.= implode(' OR ', $where);
}else{
    $sql.= '1';
}
Автор: Parag Chaure Размещён: 19.07.2016 07:08

0 плюса

37 Репутация автора

FIND_IN_SET () находит только позицию первого аргумента.

Вы можете попробовать

SELECT
 *
FROM tbl_request
WHERE FIND_IN_SET('51', proid)
   OR FIND_IN_SET('54', proid)
   OR FIND_IN_SET('8', proid);
Автор: Amran Размещён: 19.07.2016 07:11

0 плюса

1922 Репутация автора

Вы можете сделать это, как показано ниже:

$proid = array(0=>51,1=>54,2=>8);

$cond_array = array() ;

foreach($proid as $val){
    $cond_array[] = "FIND_IN_SET($val, `proid`) > 0";
}

$sql = "SELECT * FROM `tbl_request` WHERE ".implode(' OR ', $cond_array);

echo $sql;

выход :

SELECT SELECT * FROM `tbl_request` WHERE FIND_IN_SET(51, `proid`) > 0 OR FIND_IN_SET(54, `proid`) > 0 OR FIND_IN_SET(8, `proid`) > 0
Автор: Amit Rajput Размещён: 19.07.2016 07:23

0 плюса

11132 Репутация автора

попробуй это

            <?php

        $proid = array(51,54,8);


        $concat='';

        foreach($proid as $row)
        {
          if(empty($concat))
          {
              $concat.=" FIND_IN_SET('$row', proid) >0";

          }
          else
          {

           $concat.=" or FIND_IN_SET('$row', proid) >0";
          }


        }

        echo "SELECT * FROM tbl_request WHERE ".$concat

        ?>
Автор: JYoThI Размещён: 19.07.2016 07:27

0 плюса

8 Репутация автора

Ребята для выбора нескольких полей я использую этот код, и он работает нормально

$proids='';
        foreach($_POST["product"] as $row_product)
        {
          if(empty($proids))
          {
              $proids.=" FIND_IN_SET('$row_product', `proid`) >0";
          }
          else
          {
            $proids.=" OR FIND_IN_SET('$row_product', `proid`) >0";
          }
        }

        $disidreport='';
        foreach($_POST["distributor"] as $row_distributor)
        {
          if(empty($disidreport))
          {
              $disidreport.=" FIND_IN_SET('$row_distributor', `disidreport`) >0";
          }
          else
          {
            $disidreport.=" OR FIND_IN_SET('$row_distributor', `disidreport`) >0";
          }
        }

        echo $select_req = "SELECT * FROM `tbl_request` WHERE (".$disidreport.") AND (".$proids.")";
Автор: Amit Размещён: 19.07.2016 08:02

0 плюса

64 Репутация автора

$sql = 'SELECT * FROM course where ';
$items = array(49,50,52);
foreach($items as $item){
    $where[] = "FIND_IN_SET(cid,'$item') > 0";
}
if(is_array($where)){
    $sql.= implode(' OR ', $where);

}else{
    $sql.= '1';

}
$statement = $dbo->prepare($sql);

$statement->execute();

$result = $statement->fetchAll();

  foreach($result as $row)
     {
      echo $sid=$row["cid"]."      ";
      echo $name = $row["cname"]."<br>";
     }
}

Это будет работать как измененный в приведенном выше заявлении. Я не получаю результат. но после изменения в FIND_IN_SET я получу все данные.

введите описание изображения здесь

Это утверждение верно, я не говорю, что это неправильно, но ошибка в функции FIND_IN_SET SQL . Вы можете увидеть на картинке, какой запрос поможет мне получить базу данных.

Автор: Keyur Vala Размещён: 28.10.2018 10:54
Вопросы из категории :
32x32