PHP - Java Script - MySQL (формы)
<?php
$result=mysql_query ("SELECT id, name FROM category ORDER BY name");
while ($category = mysql_fetch_array ($result))
{
...
}
?>
</select>
<select name="stage2" size="1">
<option value="">.........</option>
</select>
<input type="button" name="test" value="Go!">
</p>
<script>
<!--
var groups=document.doublecombo.example.options.length
var group=new Array(groups)
for (i=0; i<groups; i++)
group=new Array()
group[0][0]=new Option(".........","")
<?php
// без этого запроса скрипт не работает
[COLOR=red]$result=mysql_query ("SELECT id, name FROM category ORDER BY name");[/COLOR]
$a=1;
while ($category = mysql_fetch_array ($result))
{
$cat = $category ["id"];
$b=0;
$result2=mysql_query ("SELECT id, name FROM subject WHERE category='$cat' ORDER BY name");
while ($subject = mysql_fetch_array ($result2))
{
echo "group[$a][$b]=new Option(\"".$subject ["name"]."\", \"".$subject ["id"]."\")\n";
$b++;
}
$a++;
}
Кто-нибудь может объяснить мне, почему без второго запроса к базе этот скрипт не работает?
<?php
$result=mysql_query ("SELECT id, name FROM category ORDER BY name");
while ($category = mysql_fetch_array ($result))
{
...
}
?>
</select>
<select name="stage2" size="1">
<option value="">.........</option>
</select>
<input type="button" name="test" value="Go!">
</p>
<script>
<!--
var groups=document.doublecombo.example.options.length
var group=new Array(groups)
for (i=0; i<groups; i++)
group=new Array()
group[0][0]=new Option(".........","")
<?php
// без этого запроса скрипт не работает
[COLOR=red]$result=mysql_query ("SELECT id, name FROM category ORDER BY name");[/COLOR]
$a=1;
while ($category = mysql_fetch_array ($result))
{
$cat = $category ["id"];
$b=0;
$result2=mysql_query ("SELECT id, name FROM subject WHERE category='$cat' ORDER BY name");
while ($subject = mysql_fetch_array ($result2))
{
echo "group[$a][$b]=new Option(\"".$subject ["name"]."\", \"".$subject ["id"]."\")\n";
$b++;
}
$a++;
}
Поскольку: array mysql_fetch_array
Возвращает массив, соответствующий извлечённому ряду, или FALSE, если рядов больше нет.
А после первого while рядов больше нет, вот для этого и нужен второй запрос.
Поскольку: array mysql_fetch_array
Возвращает массив, соответствующий извлечённому ряду, или FALSE, если рядов больше нет.
А после первого while рядов больше нет, вот для этого и нужен второй запрос.
Кажется поняла... То есть надо было писать
$category = mysql_fetch_array ($result);
while ($category) {...}
И тогда можно было бы использовать массив сколько угодно раз. Правильно?
Кажется поняла... То есть надо было писать
$category = mysql_fetch_array ($result);
while ($category) {...}
И тогда можно было бы использовать массив сколько угодно раз. Правильно?
не совсем так:
$result=mysql_query ("SELECT id, name FROM category ORDER BY name");
while ($category = mysql_fetch_array ($result)){}
Ставит коретку извлеченных рядов (подходящих запросу), на ночало.
И вот такую комбинацию вызывай сколько хочешь раз.. (ответы будут идентичны).
У меня ведь так и было написано, как ты предлагаешь, но при этом приходится повторять запрос к базе. По-моему нет смысла запрашивать ту же информацию, которая уже считана.
Sorry, я особо не вникал в ваш скрипт, но насколько я понял Вам нужно, просто дважды вытащить результат используя один запрос. Рекомендую использовать mysql_data_seek
Вот небольшой пример скрипта с этой функцией, я сам его написал и проверил - работает...
Поначалу мы выводим весь $res, потом переводим курсор в запросе в начало, и ещё разок выводим результат запроса
$query="select * from Department";
$res=mysql_query($query);
while($arr=mysql_fetch_array($res)){
//Первый вовод результата
echo$arr[1]."
";
}
echo"<hr>";
echo mysql_num_rows($res)-1;
for($i=mysql_num_rows($res)-1;$i>0;$i--){
//Переводим курсор в начало
mysql_data_seek($res,$i);
// echo$i."
";
}
echo"<hr>";
while($arr=mysql_fetch_array($res)){
//Второй раз выводи результат
echo$arr[1]."
";
}
Удачи...
Yana правильно решила ОДИН раз создавать массив из запрса и МНОГО раз использовать этот массив
mysql_data_seek($res,0)
...и всё. В таком случае не надо заводить левый массив
А вообщето каждый в праве делать как он пожелает, я не настаиваю...
Я вообще такой функции не знала :)
$category = mysql_fetch_array ($result);
while ($category) {...};
reset $category;
while ($category) {...};
Проверь что получится
Если все ок то используй что больше нравится
Romik, а может так проще
$category = mysql_fetch_array ($result);
while ($category) {...};
reset $category;
while ($category) {...};
Yana,Опасения Alone по поводу того, что это будет работать только с одной записью - справедливы.
Подумай, ведь reset сбрасывает указатель в массиве, а массив получается за одну выборку из результата. Вот и получается, что ты будешь работать только с одной записью из полученного результата.
Хотя, если тебе как раз нужно работать только с одной записью, тогда твоё предложение вполне рационально