Неизвестный столбец 'building_requirements_count' в 'списке полей' - PullRequest
0 голосов
/ 12 июля 2010

Я делаю небольшую игру в PHP с MySQL. Теперь у меня проблема с одним из созданных мной SQL-запросов. Идея состоит в том, что запрос проверяет, достаточно ли у пользователя материалов.

У меня есть запрос, что если я использую его так, он работает:

SELECT
(
  SELECT COUNT(*)
  FROM building_requirements
  WHERE building_id = '1'
) as building_requirements_count,
(
  SELECT COUNT(*)
  FROM user_materials, building_requirements
  WHERE user_materials.material_id = building_requirements.material_id
    AND user_id = '27'
    AND building_id = '1'
    AND (user_material_amount >= building_material_amount) = 1
) as user_materials_count;

Но когда я добавляю один столбец, который использует результат этих подзапросов, он завершается неудачно:

SELECT
(
  SELECT COUNT(*)
  FROM building_requirements
  WHERE building_id = '1'
) as building_requirements_count,
(
  SELECT COUNT(*)
  FROM user_materials, building_requirements
  WHERE user_materials.material_id = building_requirements.material_id
    AND user_id = '27'
    AND building_id = '1'
    AND (user_material_amount >= building_material_amount) = 1
) as user_materials_count, 
building_requirements_count = user_materials_count as enough_materials;

Я получаю ошибку:

#1054 - Unknown column 'building_requirements_count' in 'field list'

Может кто-нибудь объяснить мне, почему я не могу использовать результаты подзапроса здесь? И как я могу это исправить?

Ответы [ 2 ]

1 голос
/ 12 июля 2010

Где у вас есть

building_requirements_count = user_materials_count as enough_materials;

Я думаю, вы можете иметь в виду ...

building_requirements_count - user_materials_count as enough_materials;
0 голосов
/ 12 июля 2010

Потому что в вашем определении таблицы нет поля с именем building_requirements_count. Вам не разрешено использовать здесь определяемые пользователем поля, кроме части WHERE.

Почему бы вам не использовать свои собственные поля в разделе WHERE вашего запроса?

EDIT: Вам было бы проще получить каждое значение отдельно от БД и выполнить вычисления в PHP.

$result = mysql_query("SELECT COUNT(*) FROM building_requirements WHERE building_id = '1'");
if ($result) {
  $row = mysql_fetch_row($result);
  $building_requirements_count  = $row[0];
}
else {
  $building_requirements_count = 0;
}

$query = "  SELECT COUNT(*)
  FROM user_materials, building_requirements
  WHERE user_materials.material_id = building_requirements.material_id
    AND user_id = '27'
    AND building_id = '1'
    AND (user_material_amount >= building_material_amount) = 1";

$result2 = mysql_query($query);
if ($result2) {

  $row = mysql_fetch_row($result2);
  $user_material_count  = $row[0];
}
else {
  $user_material_count = 0;
}

$enough_materials = ( $user_material_count >= $building_requirements_count) ? true : false;
...