2017-08-11 7 views
1

$query_ppimageの結果を最初のユーザークエリのサブ配列にするにはどうすればよいですか?現時点では、出力はユーザーアレイの内部ではなく、ユーザーの下にプロファイルイメージを出力します。したがって、リンクされていません。最初の配列の中にjson配列を配置しますか?

どうすればいいですか?

ここ
$query_user = "SELECT *,'user' AS type FROM users WHERE username LIKE '".$query."' OR firstname LIKE '".$query."' OR lastname LIKE '".$query."'"; 
$quser = $conn->query($query_user); 
$rows = array(); 
while($user = mysqli_fetch_assoc($quser)) { 
    $query_ppimage = "SELECT id, post_id, relation, userID, file_format FROM media WHERE userID = '".$user['id']."' AND relation = 'profile_picture' UNION ALL SELECT -1 id, '55529055162cf' post_id, 'profile_picture' relation, '0' userID, 'jpg' file_format ORDER BY id DESC"; 
    $qppimg = $conn->query($query_ppimage); 
    while($ppimg = mysqli_fetch_assoc($qppimg)) { 
     $rows[] = $ppimg; 
     $rows[] = $user; 
    } 
} 

は配列が返される方法です:

[ 
    { 
    "id": "117", 
    "post_id": "1", 
    "relation": "profile_picture", 
    "userID": "3", 
    "file_format": "jpg" 
    }, 
    { 
    "id": "3", 
    "email": "[email protected]", 
    "type": "user" 
    }, 
] 

それがどのように見えるべきか、または類似した何か は、ここに私のコードです。私は私が正しくサブアレイの名前とは思わないが、それはあなたが二回$rowsに追加する2つの別々の要素を追加している

[ 
    { 
    "id": "3", 
    "email": "[email protected]", 
    "type": "user" 
     ppimage: { 
     "id": "117", 
     "post_id": "1", 
     "relation": "profile_picture", 
     "userID": "3", 
     "file_format": "jpg" 
     } 
    }, 
] 
+0

あなたが持っている結果である、そしてそれがどうあるべきか? – perodriguezl

+0

1.オブジェクト指向または手続き型のプログラミング(これはコード内では「美容的」である)の1つの種類に固執する必要があります。 2.これを1つのクエリに限定することができます。ループ内のクエリは、めったに良いことではありません。 – Qirel

+0

私はこれを持っています:{firstname:casper} {filename:casper} {file_format:img}は{firstname:casper、ppimage {file_format:img}}でなければなりません。最初のユーザーアレイ – SARUAV

答えて

0

名ppimageを必要とします。最初に配列要素を構築してから、$ rows配列に追加してみてください。このような何か:

$newrow = $user; 
$newrow['ppimage'] = $ppimg; 
$rows[] = $newrow; 
+0

あなたは伝説です。どうもありがとうございます。完全に働いた:) – SARUAV

0

JOIN使用すると、1つのクエリにこれを制限することができます。ループ内でクエリを使用すると、は決してとなる可能性があります。さらに、SQLインジェクションから保護するためには、プリペアドステートメントを使用する必要があります。

以下のコードはJOINを使用しているため、1つのクエリを取得し、例に示すように配列を構成します。これはハードコーディングされているので、どこに行くかを制御しやすくなります。JOINを使用しているため、データはすべて一度に(別々の変数ではなく)一度にフェッチされます。

$row = array(); 
$stmt = $conn->prepare("SELECT m.id, m.post_id, m.relation, m.file_format, u.id, u.email, 'user' as type 
         FROM media m 
         JOIN users u ON u.id=m.userID 
         WHERE m.relation = 'profile_picture' 
          AND (username LIKE ? 
          OR firstname LIKE ? 
          OR lastname LIKE ?) 
         ORDER BY m.id DESC"); 
$stmt->bind_param("sss", $query, $query, $query); 
$stmt->execute(); 
$stmt->bind_result($mediaID, $postID, $relation, $file_format, $userID, $user_email, $type); 
while ($stmt->fetch()) { // If you just expect one row, use LIMIT in the query, and remove the loop here 
    $row[] = array('id' => $userID, 
        'email' => $user_email, 
        'type' => $type, 
        'ppimage' => array('id' => $mediaID, 
             'post_id' => $postID, 
             'relation' => $relation, 
             'userID' => $userID, 
             'file_format' => $file_format) 
      ); 
} 
$stmt->close(); 
関連する問題