私はすべての基本的な食物データを取得するPHP関数を書こうとしています。それから、その食べ物の食材を入手してください。以前のクエリのデータを使用して複数の選択を行うにはどうすればよいですか?
したがって、最初のクエリでは、受け取った各行に「フードID」があります。
その後、私はそれぞれの食品のIDを取りたい...(私の問題がある場合、これはあるかもしれない)
その後、私は提供のIDを持っているfood_ingテーブルから成分を選択します。 (複数の選択肢に問題がある可能性もあります)
各食品に複数の成分が戻ってきます。これは非常に大きな配列そのものになります。
私のセットアップにもう少しコンテキストを与えるために、私は3つのテーブルを持っています。食べ物、food_ratings、food_ing。
food_ingは成分がいっぱいです。各行には数、成分、それに関連するfood_idがあります。
私は何を求めていますか...この情報を照会して返す最良の方法は何でしょうか?各食品と
-An配列は、それは、ID、説明、種類...もともと照会、すべての食品のすべての成分と
-An配列です。 (データを取得した後にAS3側でそれぞれの食品に並べ替えることができます)
私はこのような考えをしていました。しかし、それは動作していません。私は自分の選択した食材のループを構築している私のループ内で働くために各食品IDを取得するように見えることはできません。私はこれを使用していると思います
誰かが1つのクエリでこれを行う方法を説明できるなら、何が素晴らしいだろうか?
function getFoods($start, $limit) {
$qOne = mysql_query("SELECT a.id, a.name, a.type, AVG(b.r) AS fra, COUNT(b.id) as tvotes FROM `foods` a LEFT JOIN `foods_ratings` b ON a.id = b.id GROUP BY a.id ORDER BY fra DESC, tvotes DESC LIMIT $start, $limit;");
$arrOne = mysql_fetch_array($qOne);
$i = 0;
$qry = "";
foreach ($arrOne as $value) {
$fid = $value['id'];
if ($i > 0)
$qry .= " UNION ";
$i++;
$qry .= "SELECT fid, ing, amount FROM foods_ing WHERE fid='$fid'";
}
$qTwo = mysql_query($qry);
/*
if this helps anyone...I'm using amfphp to communicate with an AS3 project.
also returning $qOne works. so no issues there. The issue is just with $qTwo.
Unless the reccomendation is to somehow do this with 1 query.
*/
return array($qOne, $qTwo);
}
実際、私はそれがなぜ奇妙に見えているのか分かりました。それは1行しか得ていないようだ。私はこれを試みたが、まだ問題がある。今何も返されていません
EDIT:別のループを共有しようとしました。今度は最初の結果は機能しません...ループを使用して結果を返すか、
ですが、少なくともこのループでは、正しい結果が返されます(2番目の配列用)
function getFoods($sort, $start, $limit) {
$qOne = mysql_query("SELECT a.id, a.name, a.type, AVG(b.r) AS fra, COUNT(b.id) as tvotes FROM `foods` a LEFT JOIN `foods_ratings` b ON a.id = b.id GROUP BY a.id ORDER BY fra DESC, tvotes DESC LIMIT $start, $limit;");
$i = 0;
$qry = "";
while ($row = mysql_fetch_array($qOne)) {
$fid = $row['id'];
if ($i > 0)
$qry .= " UNION ";
$i++;
$qry .= "SELECT fid, ing, amount FROM foods_ing WHERE fid='$fid'";
}
$qTwo = mysql_query($qry);
return array($qOne, $qTwo);
}
EDIT:
は、ここ1、クエリでそれをすべてやろうとしているの別の試みです。しかし、それだけで少なくとも数成分
があるので(それはINGのために戻って来るの配列である必要があり、それはINGと量のために取得する最初の値を返すだSELECT c.ing, c.amount, a.id, a.name, a.type, AVG(b.r) AS fra,
COUNT(b.id) as tvotes
FROM foods a
LEFT JOIN foods_ratings b ON a.id = b.id, foods_ing c
GROUP BY a.id
ORDER BY fra DESC, tvotes DESC
LIMIT $start, $limit
mysql_fetch_array()を誤って使用しているようです。 1行だけを返すので、foreachは1行の列をループします。つまり、$ value ['id']は存在しません。各行に対してループ内の関数を呼び出さなければなりません。 – flo