ایجاد شرط برای SQL_CALC_FOUND_ROWS
سلام یه کوئری دارم به صورت زیر :
SELECT SQL_CALC_FOUND_ROWS tag, COUNT( tag ) AS count
FROM _tags
GROUP BY tag
ORDER BY count DESC
LIMIT 100
این کوئری تعداد تگها رو بر میگردونه میخوام بگم اونایی که تعداد تگهاش 1 هست روپاک کنه چجور میتونم روی count شرط بزارم؟
نقل قول: ایجاد شرط برای SQL_CALC_FOUND_ROWS
برای SELECTمیتونید از HAVING استفاده کنید. HAVING در واقع یه WHERE رو نتیجهی کوئریه:
SELECT SQL_CALC_FOUND_ROWS tag, COUNT( tag ) AS count
FROM _tags
GROUP BY tag
HAVING count = 1
ORDER BY count DESC
LIMIT 100;
نقل قول: ایجاد شرط برای SQL_CALC_FOUND_ROWS
نقل قول:
نوشته شده توسط
امیـرحسین
برای SELECTمیتونید از HAVING استفاده کنید. HAVING در واقع یه WHERE رو نتیجهی کوئریه:
SELECT SQL_CALC_FOUND_ROWS tag, COUNT( tag ) AS count
FROM _tags
GROUP BY tag
HAVING count = 1
ORDER BY count DESC
LIMIT 100;
ممنون از پاسختون كار ميكنه به درستي فقط يه سوال
الان ميخوام همين شرطو براي پاك كردن بزارم ولي كار نميكنه Delete روش ديگه اي داره ؟
نقل قول: ایجاد شرط برای SQL_CALC_FOUND_ROWS
DELETE FROM _tags
WHERE id IN (
SELECT id, COUNT(tag) AS count
FROM _tags
GROUP BY tag
HAVING count = 1
ORDER BY count DESC
LIMIT 100
);
نقل قول: ایجاد شرط برای SQL_CALC_FOUND_ROWS
نقل قول:
نوشته شده توسط
امیـرحسین
DELETE FROM _tags
WHERE id IN (
SELECT id, COUNT(tag) AS count
FROM _tags
GROUP BY tag
HAVING count = 1
ORDER BY count DESC
LIMIT 100
);
اين خطا رو ميده
#1241 - Operand should contain 1 column(s)
نقل قول: ایجاد شرط برای SQL_CALC_FOUND_ROWS
چون شما در قسمت شرط where id in فقط یک فیلد معرفی کرده اید ولی در قسمت مقایسه id, COUNT(tag) AS count دو فیلد وجود دارد طبیعی است که مقدار یک فیلد را نمی توان با دو فیلد همزمان مقایسه نمود
نقل قول: ایجاد شرط برای SQL_CALC_FOUND_ROWS
دستور COUNT رو میتونی توی HAVING بذاری و اون فیلد رو حذف کنی اگه ORDER BY اینا رو نمیخوای. در غیر اینصورت اینو تست کن
DELETE FROM _tags
WHERE id IN (
SELECT id FROM (
SELECT id, COUNT(tag) AS count
FROM _tags
GROUP BY tag
HAVING count = 1
ORDER BY count DESC
LIMIT 100
)
);
نقل قول: ایجاد شرط برای SQL_CALC_FOUND_ROWS
اگه ارور alias گرفتی برای SELECT تویی alias بذار:
DELETE FROM _tags
WHERE id IN (
SELECT id FROM (
SELECT id, COUNT(tag) AS count
FROM _tags
GROUP BY tag
HAVING count = 1
ORDER BY count DESC
LIMIT 100
) AS a
);
نقل قول: ایجاد شرط برای SQL_CALC_FOUND_ROWS
اين كوئري رو زدم جواب داد
DELETE dle_tags.* FROM dle_tags
JOIN (
SELECT tag FROM dle_tags GROUP BY tag HAVING COUNT(tag) = 1
) AS subq USING (tag)