2016-03-28 7 views
0

私はMySQLからデータを取得する必要があるアンドロイドアプリをやっています。しかし、私は間違った出力を得ています。MySQLで間違った出力を得ています

テーブル名が血液であり、構造は次のように、PHPコードは

structure of the table

<?php 
    $con=mysqli_connect("server","username","password","databasename"); 

$city = "HYDERABAD"; 
$blood = "APOSITIVE"; 

$sql = "select name,blood,age,lastdonated,mobile,email,state,city,sex from blood where upper(blood) = '$blood' OR lower(blood) = '$blood' AND upper(city) = '$city' ORDER BY id DESC LIMIT 1000 "; 

$res = mysqli_query($con,$sql); 

$result = array(); 

while($row = mysqli_fetch_array($res)){ 
array_push($result, 
array('name'=>$row[0], 
'blood'=>$row[1], 
'age'=>$row[2], 
'donated'=>$row[3], 
'number'=>$row[4], 
'email'=>$row[5], 
'state'=>$row[6], 
'city'=>$row[7] 
)); 
} 

echo json_encode(array("feedAnegative"=>$result)); 

mysqli_close($con); 

?> 

出力は上記で

{ 
    "feedAnegative":[ 
     { 
     "name":"saicharan", 
     "blood":"APOSITIVE", 
     "age":"19", 
     "donated":"0000-00-00", 
     "number":"8794511258", 
     "email":"[email protected]", 
     "state":"andhrapradesh", 
     "city":"vijayawada" 
     }, 
     { 
     "name":"b", 
     "blood":"Apositive", 
     "age":"20", 
     "donated":"0000-00-00", 
     "number":"1234567892", 
     "email":"[email protected]", 
     "state":"Telangana", 
     "city":"khammam" 
     }, 
     { 
     "name":"a", 
     "blood":"APOSITIVE", 
     "age":"20", 
     "donated":"0000-00-00", 
     "number":"1245863921", 
     "email":"[email protected]", 
     "state":"telangana", 
     "city":"hyderabad" 
     } 
    ] 
} 

される以下の通りです。 jsonのフィード私はちょうど都市=ハイデラバードに関連するデータを取得する必要があります。 しかし、私は血液が好きなテーブルのすべてのレコードを取得しています。 エラーはどこですか。私はこれを解決するのを助けてください。

+0

SQL Serverを使用することは不可能です。 mysqli拡張(名前が示すように)はMySQLでのみ機能します。 –

+0

ところで、 '_ci'照合は大文字と小文字を区別しない検索を実行するのに十分なはずです。あなたはUPPER()とLOWER()の必要はありません。 –

+0

ÁlvaroGonzálezさんに感謝します。そのmysql。私の質問に答えました。正しい答えを投稿して削除した人もいます。私は彼/彼女にもたくさん感謝しています。 – Karrthik

答えて

1

何結果セット内の行を決定すると、MySQLへ送られるSQLクエリではなく、周りのPHPコードです:

select name,blood,age,lastdonated,mobile,email,state,city,sex 
from blood 
where upper(blood) = 'APOSITIVE' OR lower(blood) = 'APOSITIVE' AND upper(city) = 'HYDERABAD' 
ORDER BY id DESC 
LIMIT 1000 

あなたは演算子の優先順位を設定するために括弧を使用しない場合は、default onesが適用されます。

オペレータの優先順位は、から優先順位が最も低く、になります。 行に一緒に表示されている演算子は、同じ優先順位を持ちます。

INTERVAL 
BINARY, COLLATE 
! 
- (unary minus), ~ (unary bit inversion) 
^ 
*, /, DIV, %, MOD 
-, + 
<<, >> 
& 
| 
= (comparison), <=>, >=, >, <=, <, <>, !=, IS, LIKE, REGEXP, IN 
BETWEEN, CASE, WHEN, THEN, ELSE 
NOT 
AND, && 
XOR 
OR, || 
= (assignment), := 

だからあなたの句は同等ですWHERE:

where upper(blood) = 'APOSITIVE' OR 
    (lower(blood) = 'APOSITIVE' AND upper(city) = 'HYDERABAD') 

また、blood列はそうlower(blood) = 'APOSITIVE'が実際に一致させることができますlatin1_general_ci照合(それがそもそもありますなぜノーアイデアを)持っています。

関連する問題