簡體   English   中英

如何通過FIND_IN_SET搜索多個項目?

[英]how can I search for multiple items by FIND_IN_SET?

我在數據庫中有一個user_privilege列,如下所示:

username        user_privilege 

a                  7gz,agt_courses,newbill

b                 dataDisplay,previllige,newUsers

c                 newbill,dataDisplay,previllige

我想搜索我在每個FIND_IN_SET之間使用OR user_privilege列中的每個值,但是不能正常工作嗎?

我寫了PHP代碼:

ob_start();
session_start();        

    $username = $_POST['username'];
            $username2 = $_POST['username2'];
    $finduser = mysqli_query($link,"SELECT * FROM LOGIN 
        WHERE username='".$username."' AND username2='".$username2."' 
        AND FIND_IN_SET('7gz', user_previllige) OR FIND_IN_SET('agt_courses',user_previllige) OR FIND_IN_SET('newbill',user_previllige) OR FIND_IN_SET('new_Trainee',user_previllige)OR FIND_IN_SET('dataDisplay',user_previllige) OR FIND_IN_SET ('previllige',user_previllige) OR FIND_IN_SET('newUsers',user_previllige) OR FIND_IN_SET('Customers ',user_previllige )") 
        or die("error");

if(mysqli_num_rows($finduser) !=0)
        {

            while($row = mysqli_fetch_array($finduser))
                {$uname = $row['username'];
                $uname2 = $row['username2'];
                $arr=explode(",",$row['user_previllige']);
                //if($arr=='dataDisplay'){echo 'yes';}//elseif($arr=='new_Trainee'){echo 'yes';}
                }

        }

        if($username == $uname && $username2 == $uname2)
            {$_SESSION['sessionname'] =$uname;
            $_SESSION['sessionname2'] =$uname2;
            $_SESSION['sessionpre'] =$arr;
            header ("location:../agtSite/agt2 - Copy.php");
            //echo '<meta http-equiv="refresh" content="1" url="../agtSite/agt2 - Copy.php"/>';
            }

            else echo 'اسم المستخدم غير موجود <a href="login.php"> اذهب للتسجيل مره اخري </a> ';

}
ob_end_flush();

但是它不能正常工作多重搜索有什么解決方案嗎?

您的腳本中有錯字。 列名稱為user_privilege並且您在查詢中使用了user_previllige

采用

$finduser = mysqli_query($link,"SELECT * FROM LOGIN 
        WHERE username='".$username."' AND username2='".$username2."' 
        AND FIND_IN_SET('7gz', user_privilege) OR FIND_IN_SET('agt_courses',user_privilege) OR FIND_IN_SET('newbill',user_privilege) OR FIND_IN_SET('new_Trainee',user_privilege)OR FIND_IN_SET('dataDisplay',user_privilege) OR FIND_IN_SET ('previllige',user_privilege) OR FIND_IN_SET('newUsers',user_privilege) OR FIND_IN_SET('Customers ',user_privilege)") 
        or die("error");

看一下這個查詢:

SELECT
    *
FROM
    LOGIN
WHERE
    username = 'a'
    AND 
    (
            FIND_IN_SET( '7gz' ,user_privilege )
        OR  FIND_IN_SET( 'agt_courses' ,user_privilege )
        OR  FIND_IN_SET( 'newbill' ,user_privilege )
        OR  FIND_IN_SET( 'new_Trainee' ,user_privilege )
        OR  FIND_IN_SET( 'dataDisplay' ,user_privilege )
        OR  FIND_IN_SET( 'previllige' ,user_privilege )
        OR  FIND_IN_SET( 'newUsers' ,user_privilege )
        OR  FIND_IN_SET( 'Customers' ,user_privilege )
    )

用下面的測試表和測試數據進行測試。 有效 :

--
-- Table structure for table `login`
--

CREATE TABLE IF NOT EXISTS `login` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(100) NOT NULL DEFAULT '',
  `user_privilege` varchar(100) NOT NULL DEFAULT '',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=4 ;

--
-- Dumping data for table `login`
--

INSERT INTO `login` (`id`, `username`, `user_privilege`) VALUES
(1, 'a', '7gz,agt_courses,newbill'),
(2, 'b', 'dataDisplay,previllige,newUsers'),
(3, 'c', 'newbill,dataDisplay,previllige');

暫無
暫無

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

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