2011-02-09 2 views
1

Привет, я пытаюсь выполнить запрос к моей базе данных, чтобы получить все записи, которые имеют один и тот же «ITEMID», таблица представляет собой список транзакций операций, выполняемых с элементами в базе данных.php_mysql_assoc игнорирует первую запись

Я проверил SQL-запрос в phpmyadmin, и он работает правильно, но когда я запускаю PHP-код, он каждый раз игнорирует первую запись. Вот мой код

<?php 
// Get the quantity of each item 
$sql1 = 'SELECT `IDPENTERED` , `ITEMID` , `QTY` , `VALUE` FROM `tblpieceentered` 
    WHERE `ITEMID` =307 ' ; 

echo $sql1."<br>"; 

// Retrieve all the data from the table 
$result1 = mysql_query($sql1) 
or die(mysql_error()); 

// store the record of the table into $row1 
$row1 = mysql_fetch_array($result1); 

$i = 1; 
$num = mysql_num_rows ($result1); 

echo "Num rows: $num <br>"; 

while ($row1 = mysql_fetch_assoc ($result1)) { 
    $data_array[$i] = $row1; 
$i++; 
} 

echo "<pre>"; 
print_r ($data_array); 
echo "</pre>"; 
?> 

Результат является:

SELECT `IDPENTERED` , `ITEMID` , `QTY` , `VALUE` FROM `tblpieceentered` WHERE `ITEMID`  =307 
Num rows: 5 

Array 
(
    [1] => Array 
     (
      [IDPENTERED] => 1999 
      [ITEMID] => 307 
      [QTY] => -1 
      [VALUE] => -0.21 
     ) 

    [2] => Array 
     (
      [IDPENTERED] => 2507 
      [ITEMID] => 307 
      [QTY] => -10 
      [VALUE] => -2.1 
     ) 

    [3] => Array 
     (
      [IDPENTERED] => 3039 
      [ITEMID] => 307 
      [QTY] => 1 
      [VALUE] => 0.21 
     ) 

[4] => Array 
     (
      [IDPENTERED] => 3040 
      [ITEMID] => 307 
      [QTY] => -1 
      [VALUE] => -0.21 
     ) 

) 

Любые идеи?

Благодаря Шон

+1

Не включайте тему в мой ответ: если вы не хотите, чтобы ваш массив начинался с '1', вы можете просто использовать '$ data_array [] = $ row' и пропустить счетчик $ i. Он добавит каждую строку в конец массива. – GolezTrol

ответ

1

mysql_fetch_array выбирает первый ряд уже. Вы не добавляете эту строку в свой массив. Цикл while продолжается со второй строкой.

1

Там идет ваш первый рекорд:

$row1 = mysql_fetch_array($result1); 

Цикл начинается на следующей (второй) записи:

while ($row1 = mysql_fetch_assoc ($result1)) 
+1

Спасибо, Это то, что я получаю от копирования пасты из нескольких разных файлов ..... –

1

Это потому, что вы выборки первого элемента перед тем время цикла ,

Удалите линию $row1 = mysql_fetch_array($result1);, и вы должны быть хорошими.

В качестве альтернативы, если вы хотите получить доступ к первой строки до цикла, вы можете использовать do-while петлю вместо:

// store the record of the table into $row1 
$row1 = mysql_fetch_array($result1); 
$i = 1; 
$num = mysql_num_rows ($result1); 
echo "Num rows: $num <br>"; 
do { 
    $data_array[$i] = $row1; 
    $i++; 
} while ($row1 = mysql_fetch_assoc ($result1)); 
1

использование MySQLi и fetch_all будет гораздо более эффективным:

mysql_fetch_array add all rows?

+0

Спасибо @ f00 Я попробую позже сегодня, так как запрос возвращает более 1500 записей, и база данных постоянно растет , –

Смежные вопросы