Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Не могу решить поставленную задачу, уже 2 дня не могу понять как, все перепробывал

Сообщения:  [1-10]    [11-20]  [21-24] 

 
 автор: Valick   (29.01.2012 в 17:34)   письмо автору
 
   для: Sfinks   (29.01.2012 в 17:28)
 

я ориентировался на скриншот, и решал задачу с самого начала
автор просил решить её с середины не понимая что изначально пошёл не по тому пути, вот и всплывала эта вся путиница
__
Этого не в цикле не сделаешь.
можно и нужно делать без цикла

  Ответить  
 
 автор: Sfinks   (29.01.2012 в 17:28)   письмо автору
 
   для: Valick   (29.01.2012 в 16:56)
 

Если это то что нужно, значит я не понял задачу. Это называется не "выбрать то чего нет", а "выбрать все и в этом отметить то что есть". А я то составлял массив того что есть, и массив того чего нет. Думал оно нужно для дальнейшей обработки. Этого не в цикле не сделаешь.

  Ответить  
 
 автор: 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($res10);
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>";
}
?> 

  Ответить  
 
 автор: tetron   (29.01.2012 в 14:33)   письмо автору
 
   для: Sfinks   (29.01.2012 в 14:10)
 

Не задумывался на этим моментом - сейчас изучаю запросы sql. Буду углубляться в знания чтобы меньше "говнокодить" :)

  Ответить  
 
 автор: Sfinks   (29.01.2012 в 14:10)   письмо автору
 
   для: 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))

У вас запрос в запросе в запросе. Такая вложенность это перебор.

  Ответить  
 
 автор: tetron   (29.01.2012 в 14:06)   письмо автору
 
   для: 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>";
                    }
        }
?>


Работает как и хотел, сейчас попробую ваш вариант

  Ответить  
 
 автор: Sfinks   (29.01.2012 в 13:53)   письмо автору
 
   для: 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>
Это по моему мнению минимальная нагрузка при данной задаче!

Результат:
жим штанги лежа
  Влияет на:
    -плечи
    -руки
  Не влияет на:
    -грудь
    -спина
    -пресс
    -ноги
жим штанги на наклонной скамье
  Влияет на:
    -грудь
  Не влияет на:
    -плечи
    -руки
    -спина
    -пресс
    -ноги

  Ответить  
 
 автор: tetron   (29.01.2012 в 13:46)   письмо автору
 
   для: Sfinks   (29.01.2012 в 13:17)
 

Спасибо за ваш код, работает - буду дальше изучать php+mysql в практике

  Ответить  
 
 автор: tetron   (29.01.2012 в 13:30)   письмо автору
 
   для: Sfinks   (29.01.2012 в 13:17)
 

Вывод не для пользователей, а для администратора - чтобы он мог посмотреть все упражнений и настроить их. На какие мышцы действует а на какие нет.

  Ответить  
 
 автор: Sfinks   (29.01.2012 в 13:17)   письмо автору
 
   для: Valick   (29.01.2012 в 12:51)
 

И что, если надо перебрать каждый вид упражнений? Давайте застрелимся, но чтоб нагрузки не было. Я выше написал, как по каждому ид упражнения одним запросом (и то с подзапросом, т.е. на уровне БД это снова 2 запроса) получить группы мышц на которые это упражнение не влияет, но это все-равно придется делать в цикле для каждого ид! Или вы сможете написать запрос который сразу выдаст:

жим штанги лежа не действует на
-грудь
-спина
-пресс
-ноги
жим штанги на наклонной скамье не действует на
-плечи
-руки
-спина
-пресс
-ноги
С удовольствием посмотрю на такой запрос!

  Ответить  

Сообщения:  [1-10]    [11-20]  [21-24] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования