|
|
|
| Никак не могу справиться со транным глюком при формировании одного массива из 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 эти запросы с конкретными числами нормально работают, выдают все правильно.
Никак не могу понять, в чем причина такого странного глюка? | |
|
|
|
|
|
|
|
для: 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++;
}
?>
|
| |
|
|
|
|
|
|
|
для: Artem S.
(22.11.2004 в 16:55)
| | Сенкс, я понял свою ошибку. Сделал через mysql_fetch_row() | |
|
|
|