Я пытаюсь написать функцию php, которая получает все основные данные о еде. Тогда возьмите ингредиенты для этой еды.
Итак, для первого запроса у каждой полученной строки есть «идентификатор еды».
Затем я хочу взять каждый идентификатор еды ... (это может быть, где моя проблема)
Затем выберите ингредиенты из таблицы food_ing, у которых есть идентификаторы, которые я предоставляю.
(также может быть проблема с несколькими вариантами выбора)
Он будет возвращать несколько ингредиентов для каждой еды. Это будет довольно большой массив.
Итак, чтобы дать больше контекста моей установке, у меня есть 3 таблицы. еда, еда, еда, еда.
food_ing заполнен ингредиентами, в каждой строке указано количество, ингредиент, а затем food_id, с которым он связан.
Итак, что я спрашиваю ... каков наилучший способ запросить и вернуть эту информацию?
-Массив с каждым продуктом, его идентификатор, описание, тип ...
-Массив со всеми ингредиентами для всех продуктов, которые первоначально запрашивались. (Я полагаю, что смогу отсортировать их по соответствующим продуктам на стороне AS3 после того, как получу данные обратно)
Я думал что-то вроде этого. Но это не работает. Кажется, я не могу заставить каждую еду работать в моей петле, которая строит мою петлю избранных ингредиентов. Я полагаю, это потому, что я использую
Что было бы замечательно, если бы кто-то мог объяснить, как сделать все это в одном запросе.
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 ряд. Я попробовал это, но у меня все еще проблемы. теперь ничего не возвращается
РЕДАКТИРОВАТЬ: поделиться другим циклом, который я попробовал. Теперь первый результат не работает ... Использование цикла while разрушает мой результат или что-то в этом роде
но, по крайней мере, с помощью этого цикла, он получает правильный запрос и возвращает правильный результат (для второго массива)
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:
Вот еще одна попытка сделать все это одним запросом. Но он просто возвращает первые значения, которые он получает для ing и amount (Это должен быть массив, который возвращается для 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