Обработка CheckBox-ов!

paska_00

Новичок
Добрый день.

У меня в MySql есть 2 таблицы:
grupe

profesori_to_grupe


я вытащил все значение из таблицы grupe в таком виде:

PHP:
$result = mysql_query("SELECT * FROM grupe",$db) or die(mysql_error());
	while ($myrow = mysql_fetch_array($result))
	{
    echo '<p><input type=\'checkbox\' name=\'mass_grupa['.$myrow['id_grupa'].']\' /> '.$myrow['nume_grupa'].'</p>';
	}
	mysql_free_result($result);
и теперь мне нужно сравнить значение id_grupa из обоих таблиц, и если они совпадают, то активировать соответствующий checkbox.
в результат нужно получить такую картинку:


Помогите пожалуйста решить эту проблему...
заранее спасибо!
 

Avron2

Новичок
Проверьте на работоспособность.
PHP:
$result = mysql_query("SELECT g.*,p.* FROM grupe as g LEFT JOIN profesori_to_grupe as p USING(id_grupa)") or die(mysql_error());
    while ($myrow = mysql_fetch_assoc($result))
    {
          $s .=  "<p><input type=checkbox name=mass_grupa[".$myrow['id_grupa']."]";
          if($myrow['id_prof'] != null )
                $s .= " checked";    
          $s .= " /> ".$myrow['nume_grupa']."</p>";
    }
    echo $s;
    mysql_free_result($result);
 

KorP

Новичок
Avron2
[OFF]а там при помощи if else никак не выкрутится? что то типа IF(grupe.id_grupa=profesori_to_grupe.id_grupa, "true", "false") AS field или там без "раздувания" базы не обойдётся?[OFF]
 

Avron2

Новичок
Очень даже обойдется ;-) (смайл временно не работает).
PHP:
$result = mysql_query("SELECT g.*, IF(g.id_grupa=p.id_grupa, "true", "false") as checked FROM grupe as g, profesori_to_grupe as p") or die(mysql_error());
    while ($myrow = mysql_fetch_assoc($result))
    {
          $s .=  "<p><input type=checkbox name=mass_grupa[".$myrow['id_grupa']."]";
          if($myrow['checked'])
                $s .= " checked";    
          $s .= " /> ".$myrow['nume_grupa']."</p>";
    }
    echo $s;
    mysql_free_result($result);
 

KorP

Новичок
PHP:
SELECT g.*, IF(g.id_grupa=p.id_grupa, "true", "false") as checked FROM grupe as g, profesori_to_grupe as p
это то понятно, только в данном случае мы получим 32 строки в результате, вместо 8
(хотя если верить phpMyAdmin, то в этом случае запрос всё-равно выполняется в 3 раза быстрее, но потом придётся как то результаты "фильтровать")
 

KorP

Новичок
В 1-ом случае тоже 8-ом строк. Сейчас по скорости потестю.
в первом - да, во втором - в 4 раза больше

ну в общем я сделал вот так
PHP:
SELECT g . * , IF( g.id_grupa = p.id_grupa, "true", "false" ) AS checked
FROM grupa AS g
LEFT JOIN profesori_to_grupe AS b
USING ( `id_grupa` )
единственное - USING же работает только если названия полей в таблицах одинаковое, а как быть если имена полей разные?
 

Avron2

Новичок
Результат работы 1-го запроса:
1.jpg
Результат работы 2-го запроса:
2.jpg

В 1-ой и 2-ой таблице pow(2,11) строк.
Количество строк 2-го вопроса ужасают!

Хотя и без этих манипуляций было все понятно...
 

KorP

Новичок
Количество строк 2-го вопроса ужасают!
не знаю, у меня 2 таблицы, одна 3 записи, вторая 31, в результате я получал 93, как и должен. не знаю откуда у тебя 4 миллиона :)

а пока не грохнул таблицы, посмотри плиз, скока займёт запрос
PHP:
SELECT g . * , IF( g.id_grupa = p.id_grupa, "true", "false" ) AS checked
FROM grupa AS g
LEFT JOIN profesori_to_grupe AS b
ON (g.id_grupa = p.other_field)
 

paska_00

Новичок
еще вопрос. допустим, в таблице profesori_to_grupe появится еще одна запись


можно сделать так чтобы сравнить только те значение где id_prof = 2
 

Avron2

Новичок
PHP:
$result = mysql_query("SELECT g.*,p.* FROM grupe as g LEFT JOIN profesori_to_grupe as p USING(id_grupa) WHERE (p.id_prof = 2)") or die(mysql_error());
 

Avron2

Новичок
не знаю, у меня 2 таблицы, одна 3 записи, вторая 31, в результате я получал 93, как и должен. не знаю откуда у тебя 4 миллиона :)
а пока не грохнул таблицы, посмотри плиз, скока займёт запрос
PHP:
SELECT g . * , IF( g.id_grupa = p.id_grupa, "true", "false" ) AS checked
FROM grupa AS g
LEFT JOIN profesori_to_grupe AS b
ON (g.id_grupa = p.other_field)
В 1-ой и 2-ой таблице 2^11 строк (я их программно заполнил).
Этот запрос по времени не отличается от 1-го.
 

KorP

Новичок
тьфу-тьфу-тьфу Avron2 прав, всё правильно, это у меня в таблице только одна запись с этим id. пошёл я спать
 

KorP

Новичок
Очень даже обойдется ;-) (смайл временно не работает).
PHP:
$result = mysql_query("SELECT g.*, IF(g.id_grupa=p.id_grupa, "true", "false") as checked FROM grupe as g, profesori_to_grupe as p") or die(mysql_error());
    while ($myrow = mysql_fetch_assoc($result))
    {
          $s .=  "<p><input type=checkbox name=mass_grupa[".$myrow['id_grupa']."]";
          if($myrow['checked'])
                $s .= " checked";    
          $s .= " /> ".$myrow['nume_grupa']."</p>";
    }
    echo $s;
    mysql_free_result($result);
продолжу малец, а если в таблице profesori_to_grupe несколько записей с id_grupa=2, как приджойнить только одну запись где MIN(id)? :)
 
Сверху