2010-07-12 110 views
0

我在php中用mysql做了一个小游戏。现在我遇到了一个我创建的sql查询的问题。这个想法是查询检查用户是否有足够的材料。'字段列表'中的未知列'building_requirements_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; 

但是当我添加一列使用这些子查询的失败的结果:

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' 

有人能向我解释为什么我不能在这里使用子查询的结果?我该如何解决这个问题?

回答

0

因为您的表格定义中没有名为“building_requirements_count”的字段。 除了WHERE部分,您不允许使用自定义字段。

为什么不在查询的WHERE部分使用自定义字段?

编辑: 你会更容易让每个值分开数据库和做计算的东西在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; 
+0

我tryed这一点。但是我得到一个错误: #1064 - 你的SQL语法有错误;检查与您的MySQL服务器版本相对应的手册,以获得在第15行'WHERE user_materials_count = 2'附近使用的正确语法。 – 2010-07-12 11:18:05

+0

那么,您的查询结构有点奇怪。你为什么要做一个(实际上是两个)子查询来获得一个你不能选择任何东西的数字。 – Thariama 2010-07-12 12:32:31

+0

因为我想在存储过程中使用它。所以,这个建议非常好,但我更喜欢完整的mysql方法。 – 2010-07-12 15:40:23

1

如果你有

building_requirements_count = user_materials_count as enough_materials; 

我想你可能意味着...

building_requirements_count - user_materials_count as enough_materials; 
相关问题