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

Форум MySQL

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

 

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

вид форума:
Линейный форум Структурный форум

тема: Неправильно формируется массив из SQL-запроса
 
 автор: Annihilator   (22.11.2004 в 14:42)   письмо автору
 
 

Никак не могу справиться со транным глюком при формировании одного массива из SQL-запроса.
Мне надо из таблицы product выбрать продукты, которые не занесены в текущую категорию в таблице allocation. Сначала я попробовал сделать эту выборку в пределах одного запроса, но оказывается, что MySQL не поддерживает вложеные запросы. Тогда решил сделать это в два приема. Вначале из таблицы allocation выбираю все ID продуктов в текущей категории, затем из таблицы product выбираю все продукты, которых нету в первом массиве.
Вот код:
<?
$allocids 
= array();
$query mysql_query("SELECT product_id FROM allocation WHERE category_id=".$cur_cat[0].";") or die (mysql_error());
$allocids mysql_fetch_array($query);
$idstr implode(","$allocids);
$notalloc = array();
$i 0;
$query mysql_query("SELECT * FROM product WHERE product_id NOT IN(".$idstr.");") or die (mysql_error());
while (
$result mysql_fetch_array($query)){
    
$notalloc[$i] = array();
    for (
$j=0$j<count($result); $j++) $notalloc[$i][$j] = htmlentities($result[$j]);
    
$i++;
}
?>

Проблема в том, что массив $allocids формируется какой-то странный: отдельные его значения вообще не выводятся, а сделанная из него строка $idstr имеет примерно такой вид: "15,15", то есть в ней всегда два раза повторяется первый попавшийся ID из выборки, остальных вообще нету. В самом MySQL эти запросы с конкретными числами нормально работают, выдают все правильно.
Никак не могу понять, в чем причина такого странного глюка?

   
 
 автор: Artem S.   (22.11.2004 в 16:55)   письмо автору
 
   для: Annihilator   (22.11.2004 в 14:42)
 

смущает строчка
>> $allocids = mysql_fetch_array($query);
Дело в том что функция mysql_fetch_array возращает только одну сточку из получиной таблицы. А у вас не одна запис,ь а один столбец, то есть несколько одинарных записей. Надо просто переписать ваш скрипт так:

<?
$allocids 
= array();
$query mysql_query("SELECT product_id FROM allocation WHERE category_id=".$cur_cat[0].";") or die (mysql_error());
while ( 
$temp mysql_fetch_array($query) )
{
  
$allocids[] = $temp['product_id'];
}
$idstr implode(","$allocids);
$notalloc = array();
$i 0;
$query mysql_query("SELECT * FROM product WHERE product_id NOT IN(".$idstr.");") or die (mysql_error());
while (
$result mysql_fetch_array($query)){
    
$notalloc[$i] = array();
    for (
$j=0$j<count($result); $j++) $notalloc[$i][$j] = htmlentities($result[$j]);
    
$i++;
}
?> 

   
 
 автор: Annihilator   (22.11.2004 в 17:00)   письмо автору
 
   для: Artem S.   (22.11.2004 в 16:55)
 

Сенкс, я понял свою ошибку. Сделал через mysql_fetch_row()

   
Rambler's Top100
вверх

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