Forum Webscript.Ru
Программирование => PHP => Тема начата: 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:
-
а ты можешь сюда кинуть текст сгенеренного запроса?
а то ничего вообще непонятно.
-
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)).")";
-
Вот текст запроса который получается в результате, в консоли все нормально, выдает то что надо (таблица вверху), а вот как эту таблицу преобразовать к массиву ?
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
-
таблица это грубо говоря двумерный массив. А в какой массив тебе ее нужно преобразовать ?
-
Преобразовать в одномерный, чтоб при окончании первой строки таблицы начиналась вторая и т.д.
-
$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 - твой массив
-
Вообще, таблица, в которой поля называются именно так, вызывает у меня ОЧЕНЬ большие подозрения.
В том, что она должна быть совсем не такая.
-
И какая она должна быть ?
-
тонкая и стройная, как березка.
три поля.