SELECT COUNT(متميزة الاسم), id, العنوان من المستخدمين

StackOverflow https://stackoverflow.com/questions/1810067

  •  05-07-2019
  •  | 
  •  

سؤال

مع PHP أحاول تشغيل استعلام SQL واختر العادي الأعمدة وكذلك العد.

$sql_str =  "select COUNT(DISTINCT name), id, adress from users";
$src = mysql_query($sql_str);

while( $dsatz = mysql_fetch_assoc($src) ){
    echo $dsatz['name'] . "<br>";
}

المشكلة هي أنه عندما يكون لدي "COUNT(متميزة الاسم) ،" في الاستعلام ، فإنه سيعيد أول دخول.عندما إزالته ، فإنه سيعود جميع إدخالات مطابقة من db.

لا يمكن فصل ذلك و لا 2 الاستعلامات, ولكن أنا أحاول تجنب هذا بسبب المخاوف الأداء.

ماذا هل أنا على خطأ ؟ thx, مكس

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

المحلول

والقدرة على مزج الأعمدة العادية وظائف الكلي هو (سوء) ميزة من الخلية. يمكنك أن تقرأ حتى سبب خطورة ذلك على وثائق الخلية في: https://dev.mysql.com/doc/ RefMan معلومات / 5.6 / EN / مجموعة تلو extensions.html

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

SELECT COUNT(DISTINCT name), null, null FROM users GROUP BY name --summary row
UNION
SELECT name, id, address FROM users --normal rows

نصائح أخرى

وCOUNT() هو دالة تجميع، فإنه يجمع على نتائج بقية الاستعلام الخاص بك. إذا كنت ترغب في حساب كل أسماء متميزة، وليس فقط أسماء متميزة المرتبطة id وaddress أنك اختيار، ثم نعم، سيكون لديك لتشغيل اثنين استفسار. هذا فقط كيف يعمل SQL.

ملحوظة أنه يجب أن يكون أيضا بندا group by عند تجميع. أعتقد أن حقيقة أن الخلية لا تتطلب ذلك أمر فظيع، وتشجع العادات السيئة حقا.

من ما أفهم كنت ترغب في الحصول على :

  • سطر واحد لكل مستخدم, على كل اسم/رقم/عنوان
  • سطر واحد لعدة مستخدمين في نفس الوقت, للحصول على عدد المستخدمين الذين لديهم نفس الاسم.

هذا غير ممكن تماما ، أود أن أقول.


الحل يكون كما قلت اثنين من الاستفسارات...

...أو في حالتك, يمكنك القيام الاعتماد على الجانب PHP, أعتقد.
أي ليس الاعتماد في الاستعلام ، ولكن استخدام additionnal حلقة في كود PHP.

وعندما يكون لديك عدد () كجزء من قائمة الحقول يجب عليك مجموعة بقية المجالات. في حالتك التي من شأنها أن تكون

select count(distinct name), id, adress from users group by id, adress
select count(distinct name), id, adress 
from users 
group by id, adress

وأفترض أنك ترغب في الحصول على كل ما تبذلونه من المستخدمين والعدد الإجمالي في نفس الاستعلام.

وحاول

  select name, id, address, count(id) as total_number 
    from users 
    group by name, id, address;
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top