PDA

View Full Version : حرفه ای: سوال مهم لطفا کمکم کنید با هزینه



aszasz
چهارشنبه 30 مرداد 1392, 13:20 عصر
دوستان من یک جدول دارم 2 تا ستون اون یکی player_id هست و یکی دیگه to_player_id هست حالا من می خوام اگر در ستون to_player_id یک عدد خاص بیشتر از 8 بار تکرار بشه بیاد توی اون ردیف های اون عدد چک کنه اگر عددی توی player_id بیشتر از 5 بار تکرار شده اون عدد رو به ما بده.
الان من با دستور زیر میتونم اون اعدادی که در to_player_id بیشتر از 8 بار شده بدست بیارم :


$query="Select to_player_id , COUNT(to_player_id) from p_queue GROUP BY to_player_id HAVING count(to_player_id) >= 8";

اما توی این ردیف هایی که بیشتر از 8 بار تکرار شده باز نمی دونم چطوری بگردم دنبال اون هایی که player_id بیشتر از 5 بار تکرار شده.
دوستان لطفا کمکم کنید خیلی نیاز دارم اگر بازهم خوب منظورم رو متوجه نشدید بگید تا بیشتر توضیح بدم

Unique
چهارشنبه 30 مرداد 1392, 14:10 عصر
راستش کمی گیج کننده و عجیبه درخواستتون اما group by روی ستون ها با اولویت و having دو تایی جواب شما را میده :


select player_id,to_player_id,count(player_id) c1,count(to_player_id) c2 from p_queue group by c2,c1 having c2 > 8 and c1 > 5

aszasz
چهارشنبه 30 مرداد 1392, 14:30 عصر
راستش کمی گیج کننده و عجیبه درخواستتون اما group by روی ستون ها با اولویت و having دو تایی جواب شما را میده :


select player_id,to_player_id,count(player_id) c1,count(to_player_id) c2 from p_queue group by c2,c1 having c2 > 8 and c1 > 5


خیلی نیاز دارم بهش میدونم پیچیده هست الان من کد زیر رو میزنم خطا میده:


$query="select player_id,to_player_id,count(player_id) c1,count(to_player_id) c2 from p_queue group by c2,c1 having c2 > 8 and c1 > 5 ";

$result = mysql_query($query) or die(mysql_error());




// Print out result
while($row = mysql_fetch_array($result)){

echo $row['player_id'];
echo "<br>";
echo $row['to_player_id'] ;

}


خطاش:
Can't group on 'c2'

MMSHFE
چهارشنبه 30 مرداد 1392, 14:47 عصر
بخاطر اینکه AS جا افتاده بود:

SELECT `player_id`,`to_player_id`,COUNT(`player_id`) AS `c1`,COUNT(`to_player_id`) AS `c2`
FROM `p_queue`
GROUP BY `c2`,`c1`
HAVING `c2`>'8' AND `c1`>'5'

aszasz
چهارشنبه 30 مرداد 1392, 15:09 عصر
بخاطر اینکه AS جا افتاده بود:

SELECT `player_id`,`to_player_id`,COUNT(`player_id`) AS `c1`,COUNT(`to_player_id`) AS `c2`
FROM `p_queue`
GROUP BY `c2`,`c1`
HAVING `c2`>'8' AND `c1`>'5'



$query="SELECT `player_id`,`to_player_id`,COUNT(`player_id`) AS `c1`,COUNT(`to_player_id`) AS `c2` FROM `p_queue` GROUP BY `c2`,`c1` HAVING `c2`>'8' AND `c1`>'5'";

$result = mysql_query($query) or die(mysql_error());




// Print out result
while($row = mysql_fetch_array($result)){

echo $row['player_id'];
echo "<br>";
echo $row['to_player_id'] ;

}


الان این شد باز هم جواب نداد و همون خطا داد
این ایدی منه لطفا pm بدید هزینه هم پرداخت میکنم براش :
amir_sun20

aszasz
چهارشنبه 30 مرداد 1392, 15:52 عصر
دوستان کمکم کنید لطفا خیلی برام مهمه مربوط به یک باگ میشه توی سایتم می خوام برطرفش کنم
من میخوام در ستون to_player_id اگر یک عدد بیشتر از 8 بار تکرار شده باشه بیاد توی اون ردیف هایی که اون عدد هست ستون player_id رو بررسی کنه اگر عددی بیشتر از 5 بار تکرار شده بود اون عدد رو بده بهم.

MMSHFE
چهارشنبه 30 مرداد 1392, 16:25 عصر
یکم شلوغ شد ولی جواب میده:

SELECT `player_id`,COUNT( `player_id` ) AS `c1`
FROM `p_queue`
WHERE (`to_player_id` IN (
SELECT `to_player_id` FROM (
SELECT `to_player_id`,COUNT( `to_player_id` ) AS `c2`
FROM `p_queue`
GROUP BY `to_player_id`
HAVING `c2`>'8'
) AS `temp`))
GROUP BY `player_id`
HAVING `c1`>'5'

Mohammadm
چهارشنبه 30 مرداد 1392, 17:12 عصر
تست کردم مشکلی نداشت
SELECT player_id, COUNT(player_id) AS Expr1
FROM [p-queue]
WHERE (to_player_id IN
(SELECT to_player_id
FROM [p-queue] AS [p-queue_1]
GROUP BY to_player_id
HAVING (COUNT(to_player_id) >= 8)))
GROUP BY player_id
HAVING (COUNT(player_id) >= 5)
نام جدول من p-queue هست نه p_queue

aszasz
چهارشنبه 30 مرداد 1392, 17:19 عصر
یکم شلوغ شد ولی جواب میده:

SELECT `player_id`,COUNT( `player_id` ) AS `c1`
FROM `p_queue`
WHERE (`to_player_id` IN (
SELECT `to_player_id` FROM (
SELECT `to_player_id`,COUNT( `to_player_id` ) AS `c2`
FROM `p_queue`
GROUP BY `to_player_id`
HAVING `c2`>'8'
) AS `temp`))
GROUP BY `player_id`
HAVING `c1`>'5'


اقا من این رو تست کردم جواب داد دقیقا همون چیزی که من می خواستم هست.
فقط یک مورد خیلی نگرانم کردم چون سایتم بازی آنلاین با حدود 50 آنلاین هست و این کد رو هم گذاشتم توی صفحه ای که دائم اجرا میشه این الان 3 تا select توی هم داره فشار خیلی زیادی به دیتابیس نمیاره؟ میترسم باز روی سرعت بازی تاثیر بزاره!!

sh.n.n786
چهارشنبه 30 مرداد 1392, 21:14 عصر
فشار خیلی زیادی به دیتابیس نمیاره؟
خیر mysql زمانی که جواب این کوری رو به شما مده تقریبا 0.02 ثانیه یا شاید کم تر هم باشه در کل mysql با این کوری مشکلی نداره
موفق باشید