سؤال

أنا أحاول الحصول على هذا الاستعلام للعمل ولكني أحصل على هذا الخطأ: العمود غير معروف "zips.city" في "وجود جملة"

`$query = "SELECT
    zips.*
    FROM
    zips
    HAVING
    zips.city LIKE '%$city%' 
    AND
    zips.stateabbr LIKE '%$state%' 
    LIMIT 1";
$result = mysql_query($query) or die (mysql_error());`

يحتوي جدول Zips الخاص بي على عمود في المدينة ، لذا لست متأكدًا من المشكلة ، وأنا أعلم أني بالوصول إلى قاعدة البيانات لأنني أستطيع تشغيل هذا الاستعلام بدون أخطاء:

$zip1query = "SELECT 
         zips.*
         FROM 
         zips
         WHERE
         zips.zip = '$zip'              
         ";

أي نصيحة ستكون موضع تقدير كبير! شكرًا!

هل كانت مفيدة؟

المحلول

ال having البند لا يعني نفس الشيء مثل where البند: عند تشغيل استعلام بسيط ، يجب استخدامك where - وهو ما فعلته في استفسارك الثاني ، الذي يعمل.

having يتم استخدامه عندما يجب تطبيق الحالة على نتيجة أ group by بند.


مما يعني أنه هنا ، يجب أن يكون استعلامك بناء بهذه الطريقة:

$query = "SELECT zips.*
    FROM zips
    where zips.city LIKE '%$city%' 
        AND zips.stateabbr LIKE '%$state%' 
    LIMIT 1";


مع ذلك ، إذا كان لا يزال لديك خطأ في عمود غير موجود أو غير موجود (على الأقل ل city و/أو stateabbr), ، سيكون ذلك لأن هذا العمود غير موجود في الجدول الخاص بك.

في هذه الحالة ، لا يوجد الكثير الذي يمكننا القيام به: سيتعين عليك التحقق من بنية الجدول الخاص بك ، لتحديد الأعمدة التي تحتوي عليها.

يمكنك التحقق من هذا الهيكل باستخدام أداة قائمة على الويب مثل phpmyadmin ، أو استخدام تعليمة SQL مثل:

desc zips;


كمرجع ، نقلاً صفحة MySQL اليدوية لـ select :

يتطلب معيار SQL أن يشير إلى الأعمدة فقط في GROUP BY جملة أو الأعمدة المستخدمة في وظائف إجمالية.
...

لا تستخدم HAVING للعناصر التي يجب أن تكون في WHERE بند.
على سبيل المثال ، لا تكتب ما يلي:

SELECT col_name FROM tbl_name HAVING col_name > 0;

اكتب هذا بدلاً من ذلك:

SELECT col_name FROM tbl_name WHERE col_name > 0;

...
ال HAVING يمكن أن يشير البند إلى الوظائف الإجمالية ، التي WHEREلا يمكن للفقرة

نصائح أخرى

جرب استخدام WHERE بدلاً من HAVING.

الطريقة الصحيحة للقيام بذلك هي استخدام جملة حيث.

$query = "SELECT
zips.*
FROM
zips
WHERE
zips.city LIKE '%$city%' 
AND
zips.stateabbr LIKE '%$state%' 
LIMIT 1";

يجب استخدامه عند التجميع ، انظر هنا للحصول على شرح

يا Jeez آسف يا رفاق لقد اكتشفت المشكلة ، ويبدو أنني وضعت مساحة أمام المدينة عندما قمت بتسمية الأعمدة في طاولتي. لذلك قمت بإعادة تسمية العمود ويعمل بفضل الفصول على أي حال! ولكن باستخدام الوظيفة التي يجب أن تسرع الأمور ، شكرًا يا رفاق!

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top