MySQL多項條件查詢

各位大大好,想詢問幾個問題,使用PHP+MySQL 5.6

我的資料庫有一張A資料表

資料表內容大概如下
id name age
-----------------
1 Jack 20
2 Aaron 19
3 Jack 27
4 Vic 22
5 Baird 37
6 Ulysses 40

假設我PHP 有一陣列arr = array({'Jack','27'},{'Vic','22'});

這個陣列即是我要查詢資料表的條件

也就是透過這個arr進行資料表的查詢
最後查詢的結果為返回
[3 Jack 27]及[4 Vic 22]兩項


目前我是使用最笨的方式用WHERE 慢慢去串AND OR
也就是SQL查詢的語句為"SELECT * FROM A資料表 WHERE name='Jack' AND age='27' OR name='Vic' AND age='22'

這樣的確可以達到我的目的,但是如果往後資料表內容一多,查詢的arr條件資料也多這樣下來是不是用AND 跟 OR下去串會變成很蠢的方法,甚至可能查詢速度會慢些。


我要詢問的問題是
Q1:在上述的問題我該如何修改我的SQL語句而非使用AND及OR下去串條件,而達到相同的查詢效果(使用MySQL 5.6)?

Q2:聽朋友的建議是說MySQL 5.7有提供JSON的查詢方式(若有誤請指教),是否能利用MySQL 5.7的JSON方式進行查詢?


非常感謝耐心的把這篇問題看完,如有敘述的不完全敬請見諒,感謝:)

評論

  • 組合成很長的 SQL 或許還比個別查詢快一點,程式化也比較容易吧

    5.7 的 json support 應該不是你想的那樣
    https://www.percona.com/live/mysql-conference-2015/sessions/json-support-mysql-57
  • 我也覺得先在PHP裡面用迴圈繞一次你的查詢條件,形成一組WHERE後面的查詢字串,再用 implode 函數串起來變成 SQL 字串就好~

  • $arr = array( array ('Jack','27'),array ('Vic','22'));
    if (count($arr)>0){
    foreach ($arr as $ar){
    $sql_sub .= \" or (name='\".$ar[0].\"' AND age= '\".$ar[1].\"')\";
    }
    }
    if (strlen($sql_sub )>0)
    $sql = \"select * from A where 1=1 $sql_sub\" ;
    ....
    ....
    ....

  • $arr = array();
    $arr[22] = array('Vic',...);
    $arr[27] = array('Jack',...);

    maxAge = 27;
    minAge = 22;
    /*
    SELECT id,name,age FROM `table_name` WHERE age>=27 AND age<=22
    */
    $tmp = array();
    $rew = mysql....
    while( $row = myslq_fetch_assoc($res) ){
    if( !isset( $arr[$row['age']] ) ){ continue; }
    if( in_array( $row['name'], $arr[$row['age']] ){ $tmp[] = $row; }
    }

Sign In or Register to comment.