简体   繁体   中英

how can I search for multiple items by FIND_IN_SET?

I have a user_privilege column in database as the following :

username        user_privilege 

a                  7gz,agt_courses,newbill

b                 dataDisplay,previllige,newUsers

c                 newbill,dataDisplay,previllige

I want to search for every value in user_privilege column I used OR between every FIND_IN_SET but doesn't work right what I do?

I write the php code:

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();

BUT it doesn't work right Is there any solution for multiple search ?????

you have a typo in your script. Column name is user_privilege and you have used user_previllige in your query.

Use

$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");

Have a look at this query :

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 )
    )

Tested with the below test table and test data . It worked :

--
-- 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');

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM