Вот мой маленький скрипт
$item="Inception"; $query="SELECT * FROM items WHERE item = '{$item}' LIMIT 1"; $result=mysql_query($query); while ($row = mysql_fetch_array($result)) { $item_id = $row['items_id']; } $sql="SELECT AVG(rating) AS AverageRating FROM ratings WHERE item_id = '{$item_id}'"; $result=mysql_query($sql); $row=mysql_fetch_array($result); print(json_encode($row)); 
Вывод:
  {"0":"4.5","AverageRating":"4.5"} 
Мой вопрос: откуда начинается строка «0»? Это нормально?
mysql_fetch_array возвращает как ассоциацию строк, так и числовую ассоциацию. Попробуйте mysql_fetch_assoc или mysql_fetch_row.
  Это нормально.  mysql_fetch_array возвращает строку с числовыми и ассоциативными индексами.  Это не O, а 0, то есть первый возвращенный столбец. 
См. Doc mysql_fetch_array : по умолчанию он возвращает массив с индексом numeric и strings. Если вам нужен только ассоциативный массив, используйте mysql_fetch_assoc или добавьте MYSQL_ASSOC в качестве второго параметра mysql_fetch_array.
  Это происходит потому, что, как указывает документация , по умолчанию mysql_fetch_array возвращает как ассоциативный массив, так и числовой.  Если вы просто хотите получить ассоциативные результаты, вы можете передать дополнительный параметр, например: 
 $row = mysql_fetch_array($result, MYSQL_ASSOC); 
Или, если вы просто хотите, чтобы массив индексировался численно:
 $row = mysql_fetch_array($result, MYSQL_NUM); 
Просто замените
 $row = mysql_fetch_array($result); 
с
 $row = mysql_fetch_array($result, MYSQL_ASSOC); 
и ноль исчезнет.
Это 3 типа результатов, которые вы можете выбрать. MYSQL_NUM, который вернет числовой массив MYSQL_ASSOC, который вернет ассоциативный массив, а также то, что вам кажется нужным, и MYSQL_BOTH, который является значением по умолчанию, и возвращает оба.