2010-07-12 109 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; 
相關問題