|
|
|
|
|
для: Sfinks
(29.01.2012 в 17:28)
| | я ориентировался на скриншот, и решал задачу с самого начала
автор просил решить её с середины не понимая что изначально пошёл не по тому пути, вот и всплывала эта вся путиница
__
Этого не в цикле не сделаешь.
можно и нужно делать без цикла | |
|
|
|
|
|
|
|
для: Valick
(29.01.2012 в 16:56)
| | Если это то что нужно, значит я не понял задачу. Это называется не "выбрать то чего нет", а "выбрать все и в этом отметить то что есть". А я то составлял массив того что есть, и массив того чего нет. Думал оно нужно для дальнейшей обработки. Этого не в цикле не сделаешь. | |
|
|
|
|
|
|
|
для: Sfinks
(29.01.2012 в 13:17)
| | как я и говорил всего два запроса:
<?php
include('conect.php');
$query1="SELECT * FROM muscle_group";
$res1=mysql_query($query1);
$query2="SELECT *
FROM category_exercises c
JOIN training_exercises t
JOIN muscle_group m
ON t.id=c.exercises_id AND m.id=category_id";
$res2=mysql_query($query2);
while($r2=mysql_fetch_assoc($res2)){
$title[$r2[exercises_id]]=$r2[exercises_title];
$exe[$r2[exercises_id]][$r2[category_id]]=$r2[title];
}
foreach($title as $key=>$value){
echo "<form action=sel.php method=post>";
echo $value."<br />";
mysql_data_seek($res1, 0);
while($r1=mysql_fetch_assoc($res1)){
echo "<input type=checkbox name=ch[$key][$r1[id]] value=$r1[title]";
if(isset($exe[$key][$r1[id]])) echo " checked>"; else echo ">";
echo " ".$r1[title]."<br />";
}
echo "<input type=submit value=сохранить>";
echo "</form>";
}
?>
|
| |
|
|
|
|
|
|
|
для: Sfinks
(29.01.2012 в 14:10)
| | Не задумывался на этим моментом - сейчас изучаю запросы sql. Буду углубляться в знания чтобы меньше "говнокодить" :) | |
|
|
|
|
|
|
|
для: tetron
(29.01.2012 в 14:06)
| | Вот судя по всему про это вам Valick и писал:
<?
$show = mysql_query ("SELECT * FROM `training_exercises`");
while ($show_row = mysql_fetch_array ($show))
{
echo "<div><h3>$show_row[exercises_title]</h1></div>";
$show_category_on = mysql_query ("SELECT * FROM `category_exercises` WHERE `exercises_id`='".$show_row[id]."'");
$not_needed_id = array();
while ($show_category_on_row = mysql_fetch_array ($show_category_on))
{
$show_category_mg = mysql_query ("SELECT * FROM `muscle_group` WHERE `id`='".$show_category_on_row[category_id]."'");
while ($show_category_mg_row = mysql_fetch_array($show_category_mg))
|
У вас запрос в запросе в запросе. Такая вложенность это перебор. | |
|
|
|
|
|
|
|
для: Sfinks
(29.01.2012 в 13:53)
| | С некоторыми модификациями из первого вашего варианта сделал так:
<?php
session_start();
require "../protection/protection.php";
require "../settings/db.php";
$show = mysql_query ("SELECT * FROM `training_exercises`");
while ($show_row = mysql_fetch_array ($show))
{
echo "<div><h3>$show_row[exercises_title]</h1></div>";
$show_category_on = mysql_query ("SELECT * FROM `category_exercises` WHERE `exercises_id`='".$show_row[id]."'");
$not_needed_id = array();
while ($show_category_on_row = mysql_fetch_array ($show_category_on))
{
$show_category_mg = mysql_query ("SELECT * FROM `muscle_group` WHERE `id`='".$show_category_on_row[category_id]."'");
while ($show_category_mg_row = mysql_fetch_array($show_category_mg))
{
echo"<div>$show_category_mg_row[title]<input name='' type='checkbox' value='' checked /></div>";
}
$not_needed_id[] = $show_category_on_row["category_id"];
}
$not_needed_id = implode(",",$not_needed_id);
$show_category_off = mysql_query ("SELECT * FROM `muscle_group` WHERE `id` NOT IN ($not_needed_id)");
while ($show_category_off_row = mysql_fetch_array($show_category_off))
{
echo"<div>$show_category_off_row[title] - <input name='' type='checkbox' value='' /></div>";
}
}
?>
|
Работает как и хотел, сейчас попробую ваш вариант | |
|
|
|
|
|
|
|
для: Valick
(29.01.2012 в 12:51)
| | А так как первый запрос (группы мышц на которые влияет упражнение) все-равно нужно делать, то второй запрос (не влияет) лучше упростить и сделать без подзапросов, так как было указано в первом посте. В общем вот что я нарисовал:
<pre><?php
$res = mysql_query("SELECT * FROM `training_exercises`");
while($exerciss = mysql_fetch_array($res)){
echo $exerciss["exercises_title"]."\n Влияет на:\n";
$res1 = mysql_query("SELECT `muscle_group`.`id` as `id`, `muscle_group`.`title` as `title`
FROM `muscle_group`, `category_exercises`
WHERE `muscle_group`.`id` = `category_exercises`.`category_id`
AND `category_exercises`.`exercises_id` = ".$exerciss["id"]);
$not_neded_id = array();
while($muscle = mysql_fetch_array($res1)){
$not_neded_id[] = $muscle["id"];
echo " -{$muscle["title"]}\n";
}
$not_neded_id = implode(",",$not_neded_id);
echo " Не влияет на:\n";
$res2 = mysql_query("SELECT `title` FROM `muscle_group` WHERE `id` NOT IN ($not_neded_id)");
while($muscle = mysql_fetch_array($res2))
echo " -{$muscle["title"]}\n";
}
?></pre>
| Это по моему мнению минимальная нагрузка при данной задаче!
Результат:
жим штанги лежа
Влияет на:
-плечи
-руки
Не влияет на:
-грудь
-спина
-пресс
-ноги
жим штанги на наклонной скамье
Влияет на:
-грудь
Не влияет на:
-плечи
-руки
-спина
-пресс
-ноги
|
| |
|
|
|
|
|
|
|
для: Sfinks
(29.01.2012 в 13:17)
| | Спасибо за ваш код, работает - буду дальше изучать php+mysql в практике | |
|
|
|
|
|
|
|
для: Sfinks
(29.01.2012 в 13:17)
| | Вывод не для пользователей, а для администратора - чтобы он мог посмотреть все упражнений и настроить их. На какие мышцы действует а на какие нет. | |
|
|
|
|
|
|
|
для: Valick
(29.01.2012 в 12:51)
| | И что, если надо перебрать каждый вид упражнений? Давайте застрелимся, но чтоб нагрузки не было. Я выше написал, как по каждому ид упражнения одним запросом (и то с подзапросом, т.е. на уровне БД это снова 2 запроса) получить группы мышц на которые это упражнение не влияет, но это все-равно придется делать в цикле для каждого ид! Или вы сможете написать запрос который сразу выдаст:
жим штанги лежа не действует на
-грудь
-спина
-пресс
-ноги
жим штанги на наклонной скамье не действует на
-плечи
-руки
-спина
-пресс
-ноги
| С удовольствием посмотрю на такой запрос! | |
|
|
|
|