2010-07-12 5 views
0

Je fais un petit jeu en PHP avec mysql. Maintenant, j'ai un problème avec l'une des requêtes SQL que j'ai créées. L'idée est que la requête vérifie si l'utilisateur dispose de suffisamment de matériaux.Colonne inconnue 'building_requirements_count' dans 'field list'

J'ai une requête que si je l'utilise comme ceci cela fonctionne:

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; 

Mais quand j'ajoute une colonne qui utilisent le résultat de ces sous-requêtes de ce échoue:

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; 

Je reçois l'erreur:

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

Quelqu'un peut-il m'expliquer pourquoi je ne peux pas utiliser les résultats de la sous-requête ici? Et comment je peux réparer ça?

Répondre

0

Cause le champ n'est pas appelé "building_requirements_count" dans votre définition de table. Vous n'êtes pas autorisé à utiliser des champs auto-définis ici sauf pour la partie WHERE. Pourquoi n'utilisez-vous pas vos champs auto-définis dans la section WHERE de votre requête?

EDIT: Il serait plus facile pour vous d'obtenir chaque valeur séparée de la DB et de faire les choses à calculer en 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

I tryed que. Mais j'obtiens une erreur: # 1064 - Vous avez une erreur dans votre syntaxe SQL; consultez le manuel qui correspond à votre version du serveur MySQL pour la bonne syntaxe à utiliser près de 'WHERE user_materials_count = 2' à la ligne 15 –

+0

Eh bien, votre structure de requête est un peu bizarre. Pourquoi faites-vous un (en fait deux) sous-sélectionner pour obtenir un nombre par lequel vous ne pouvez rien sélectionner. – Thariama

+0

En raison du fait que je veux utiliser cela dans une procédure stockée. Donc, la suggestion est très belle, mais je préfère une approche complète-mysql. –

1

Où vous avez

building_requirements_count = user_materials_count as enough_materials; 

Je pense que vous pouvez dire ...

building_requirements_count - user_materials_count as enough_materials; 
Questions connexes