Forum Webscript.Ru

Программирование => PHP => Тема начата: Smoke от 23 Октября 2003, 23:49:45

Название: Проблема с mysql_fetch_array
Отправлено: Smoke от 23 Октября 2003, 23:49:45
Возникла проблема, мучаюсь а решить не получается :mad:

В базе данных MySQL есть такий поля
+-----------+-----------+-----------+-----------+
|__ r44 ____|__ r45 ____| _____r46_ |_____r47___|
+-----------+-----------+-----------+-----------+
| 0000,0000 | 0001,0000 | 0000,0000 | 1100,0000 |
| 0000,0000 | 0001,0000 | 0000,0000 | 0000,0000 |
| 0000,0000 | 1101,0000 | 0001,0000 | 0111,0000 |
| 0000,0000 | 0001,0000 | 0000,0000 | 0001,0000 |
| 0000,0000 | 0001,0000 | 0000,0000 | 1101,0000 |
+-----------+-----------+-----------+-----------+

и т.д.

Имя первого столбца "y"
Мне нужно выполнить запрос к базе MySQL и получить выше указанные значения строк в массиве (не ассоциативном), для этого я делаю следующее:

$minix=45-5; //столбцы
$miniy=50-5; //строки
$query="select ";
 for ($i=$minix;$i<$minix+11;$i++)
 {
__if ($i!=$minix+10)
__{
____$query=$query."r".$i.",";
__}
__else
__{
____$query=$query."r".$i." ";
__}
 }
$query=$query." from ".$dbmap." where y=".$miniy." or y=".$miniy."+1 or y=".$miniy."+2 or y=".$miniy."+3 or y=".$miniy."+4 or y=".$miniy."+5 or y=".$miniy."+6 or y=".$miniy."+7 or y=".$miniy."+8 or y=".$miniy."+9";
$result=mysql_query($query);
if ($result)
{
 $num_rows=mysql_num_rows($result);
 $minimap=mysql_fetch_array($result);
 for ($i=0;$i {
___$minimap1[$i]=substr($minimap[$i],0,4);
 }

В резулбтате получается что count($minimap) равно 22 вместо 100, а реально количество не пустых элементов массива получается 11 :insane:

Подскажите плз как мне решить эту проблему, так чтобы все элементы базы данных оказались в одном массиве по очереди (слева направо) :confused:
Название: Проблема с mysql_fetch_array
Отправлено: Xander от 23 Октября 2003, 23:57:43
а ты можешь сюда кинуть текст сгенеренного запроса?
а то ничего вообще непонятно.
Название: Проблема с mysql_fetch_array
Отправлено: Макс от 24 Октября 2003, 00:06:22
echo $query; /// перед mysql_query() и сюда текст запроса.
Если массив нужен не ассоциативный то используй mysql_fetch_row
запрос типа
Цитировать
$query=$query." from ".$dbmap." where y=".$miniy." or y=".$miniy."+1 or y=".$miniy."+2 or y=".$miniy."+3 or y=".$miniy."+4 or y=".$miniy."+5 or y=".$miniy."+6 or y=".$miniy."+7 or y=".$miniy."+8 or y=".$miniy."+9";

ИМХО удобнее создавать примерно так
 
$query .= " FROM ".$dbmap." WHERE y IN (".implode(",", range($miniy, $miniy+9)).")";
Название: Проблема с mysql_fetch_array
Отправлено: Smoke от 24 Октября 2003, 00:07:50
Вот текст запроса который получается в результате, в консоли все нормально, выдает то что надо (таблица вверху), а вот как эту таблицу преобразовать к массиву ?

select r44,r45,r46,r47,r48,r49,r50,r51,r52,r53,r54 from map where y=50 or y=50+1 or y=50+2 or y=50+3 or y=50+4 or y=50+5 or y=50+6 or y=50+7 or y=50+8 or y=50+9
Название: Проблема с mysql_fetch_array
Отправлено: Макс от 24 Октября 2003, 00:11:54
таблица это грубо говоря двумерный массив. А в какой массив тебе ее нужно преобразовать ?
Название: Проблема с mysql_fetch_array
Отправлено: Smoke от 24 Октября 2003, 00:25:08
Преобразовать в  одномерный, чтоб при окончании первой строки таблицы начиналась вторая и т.д.
Название: Проблема с mysql_fetch_array
Отправлено: Макс от 24 Октября 2003, 01:17:15

$res = mysql_query($query);
$ar = array();
while ($row = mysql_fetch_row($res)) {
  $ar = $ar + array_values($row);
  // или так может, лень проверять
  // $ar = array_merge($ar, array_values($row));
}
 $ar - твой массив
Название: Проблема с mysql_fetch_array
Отправлено: Меняздесьдавнонет от 24 Октября 2003, 10:52:11
Вообще, таблица, в которой поля называются именно так, вызывает у меня ОЧЕНЬ большие подозрения.
В том, что она должна быть совсем не такая.
Название: Проблема с mysql_fetch_array
Отправлено: Smoke от 24 Октября 2003, 16:39:32
И какая она должна быть ?
Название: Проблема с mysql_fetch_array
Отправлено: Меняздесьдавнонет от 24 Октября 2003, 16:49:17
тонкая и стройная, как березка.
три поля.