0

配列を生成しようとしていますが、その方法がわかりません。

現在、次のようにデータを取得しています。

$query = mysql_query("SELECT * FROM users WHERE userEmail LIKE 'test@test.com'");
$row = mysql_fetch_array($query);

$query1 = mysql_query("SELECT * FROM categories");
while($row1 = mysql_fetch_array($query1)){

    $query2 = mysql_query("SELECT * FROM usersettings WHERE userId = ".$row['userId']." AND usersettingCategory".$row1['categoryId']." LIKE 'y'");
    $isyes = mysql_num_rows($query2);

    if($isyes > 0){

        $cat1 = mysql_query("SELECT * FROM shops WHERE shopstateId = 1 AND (categoryId1 = ".$row1['categoryId']." OR categoryId2 = ".$row1['categoryId']." OR categoryId3 = ".$row1['categoryId'].")");
        $cat1match = mysql_num_rows($cat1);

        if($cat1match > 0){
            while($cat1shop = mysql_fetch_array($cat1)){
                $cat1msg = mysql_query("SELECT * FROM messages WHERE shopId = ".$cat1shop['shopId']." and messagestateId = 1");
                while($cat1msgrow = mysql_fetch_array($cat1msg)){

                    echo $cat1msgrow['messageContent']." - ".$cat1msgrow['messageCode'];
                    $cat1img = mysql_query("SELECT shopimagePath FROM shopimages WHERE shopimageId = ".$cat1shop['shopimageId']);
                    $imgpath = mysql_fetch_array($cat1img);
                    echo " - ".$imgpath['shopimagePath']."<br/>";
                }
            }
        }
     }
}

ただし、ユーザーがプリファレンスで 3 つのショップ カテゴリをすべて選択している場合、重複が発生する可能性があります。全体ではなくメッセージIDを取り出して配列に入れる方法を見つけようとしています。たとえば、次のようになります。

1,3,5,7,1,3,5,2,4,7,8

次に、別のクエリを実行して、ID が配列内にあるすべてのメッセージを取得することができますが、そのような配列を構築する最も建設的な方法と、私が見た while ループからの配列の例がわかりません私が探しているものであること。

私を正しい方向に押し進めることができる人はいますか?

4

2 に答える 2

0

必要な結果を作成するためのはるかに簡単な方法を見つけました。大変な夜のコーディングの後の午前6時に、私の脳は炒められ、必要以上に複雑になっていたと思います。私の問題の簡単な解決策は次のとおりです。

$query = mysql_query("SELECT * FROM users WHERE userEmail LIKE 'test2@test2.com'");
$row = mysql_fetch_array($query);

$categories = "(";

$query1 = mysql_query("SELECT * FROM categories");
while($row1 = mysql_fetch_array($query1)){

    $query2 = mysql_query("SELECT usersettingCategory".$row1['categoryId']." FROM usersettings WHERE userId = ".$row['userId']);
    $row2 = mysql_fetch_array($query2);

    if($row2['usersettingCategory'.$row1['categoryId']] == y){

        $categories .= $row1['categoryId'].",";
    }

}

$categories = substr_replace($categories ,")",-1);

echo $categories."<br />";

$query3 = mysql_query("SELECT * FROM shops,messages WHERE shops.shopId = messages.shopId AND messages.messagestateId = 1 AND (shops.categoryId1 IN $categories OR shops.categoryId2 IN $categories OR shops.categoryId3 IN $categories)");

while($row3 = mysql_fetch_array($query3)){

    $query4 = mysql_query("SELECT shopimagePath FROM shopimages WHERE shopimageId = ".$row3['shopimageId']);
    $row4 = mysql_fetch_array($query4);

    echo $row3['messageContent']." - ".$row3['messageCode']." - ".$row4['shopimagePath']."<br />";
}
于 2012-05-01T20:16:09.957 に答える
0

このコードは役に立ちません。ただし、結果が重複しないクエリからの配列が必要な場合は、クエリで「 select DISTINCT (id) 」を使用するか、より単純なソリューションを使用できます。

$id_arr = array();
$sql = mysql_query("select id from id_table"); 
while ($id_result = mysql_fetch_array($sql) {
  $id  = $id_result['id'];
  if (!in_array($id, $id_arr)) {
    $id_arr[] = $id;
  }
}
于 2012-05-01T08:27:08.030 に答える