0

私はmysqlを使ってphpで小さなゲームを作っています。今、私が作成したSQLクエリの1つに問題があります。アイデアは、ユーザーが十分な資料を持っているかどうかをクエリがチェックすることです。

このように使用すると機能するというクエリがあります。

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;

しかし、これらのサブクエリの結果を使用する1つの列を追加すると、失敗します。

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'

ここでサブクエリの結果を使用できない理由を誰かに説明してもらえますか?そして、どうすればこれを修正できますか?

4

2 に答える 2

1

あなたが持っている場所

building_requirements_count = user_materials_count as enough_materials;

私はあなたが意味するかもしれないと思います...

building_requirements_count - user_materials_count as enough_materials;
于 2010-07-12T10:24:11.880 に答える
0

テーブル定義に「Building_requirements_count」というフィールドがありません。WHERE 部分を除いて、ここで自己定義フィールドを使用することは許可されていません。

クエリの WHERE セクションで自己定義フィールドを使用しないのはなぜですか?

編集: DB から各値を個別に取得し、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;
于 2010-07-12T10:21:34.463 に答える