id FromUser FromUserPol ToUser ToUserPol StatusFrom StatusTo time
1 baltazar Мужской dimon Мужской + + 1252277537
2 nas6ko Женский cross47 Мужской + + 1253817136
2 dimon Мужской naysha Женский + + 1253816877
4 maniak Мужской baltazar Мужской + + 1252333308
5 maniak Мужской dimon Мужской + + 1252333322
мне нужно подсчитать сколько у пользователя: всего друзей, сколько женского пола и сколько мужского и сколько новых..
Сейчас это делает 4 запроса, что я думаю не правильно, но в один мозга не хватает составить.
Вот они собственно 4 запроса:
$vsego_res = mysql_query("SELECT * FROM friends where ToUser='dimon' AND StatusTo='+' AND StatusFrom='+' OR
FromUser='dimon' AND StatusTo='+' AND StatusFrom='+' ORDER BY id DESC");
$kolvo_vsego=mysql_num_rows($vsego_res);
$devushek_res = mysql_query("SELECT * FROM friends where ToUser='dimon' AND StatusTo='+' AND StatusFrom='+' AND FromUserPol='Женский' OR
FromUser='dimon' AND StatusTo='+' AND StatusFrom='+' AND ToUserPol='Женский' ORDER BY id DESC");
$kolvo_devushek=mysql_num_rows($devushek_res);
$parni_res = mysql_query("SELECT * FROM friends where ToUser='dimon' AND StatusTo='+' AND StatusFrom='+' AND FromUserPol='Мужской' OR
FromUser='dimon' AND StatusTo='+' AND StatusFrom='+' AND ToUserPol='Мужской' ORDER BY id DESC");
$kolvo_parni=mysql_num_rows($parni_res);
$new_res = mysql_query("SELECT * FROM friends where ToUser='dimon' AND StatusTo='' ORDER BY id DESC");
$kolvo_new=mysql_num_rows($new_res);
Спустя 4 часа, 38 минут, 6 секунд (6.05.2010 - 12:20) KonstantinK написал(а):
Вообще не совсем понятно что в таблице но я думаю что запрос примерно такого вида
Ну а потом уже все это отсортировать как душа пожелает, я думаю в одном цикле все и сосчитается
$res = mysql_query("SELECT * FROM friends where `FromUser`='dimon')
Ну а потом уже все это отсортировать как душа пожелает, я думаю в одном цикле все и сосчитается
Спустя 50 минут, 1 секунда (6.05.2010 - 13:10) dr_Lev написал(а):
Цитата |
Ну а потом уже все это отсортировать как душа пожелает, я думаю в одном цикле все и сосчитается |
Зачем напрягать и без того напряженный PHP... данными должна заниматься база данный...
SELECT
SUM(t.cnt) AS cnt, MAX(t.pol) AS pol, MAX(t.`status`) AS `status`
FROM
(
SELECT
COUNT(*) AS cnt, MAX(fromuserpol) AS pol, MAX(STatusfrom) AS `status`
FROM
friends
WHERE
touser = 'dimon'
GROUP BY
fromuserpol, statusfrom
UNION ALL
SELECT
COUNT(*) AS cnt, MAX(touserpol) AS pol, MAX(statusto) AS `status`
FROM
friends
WHERE
fromuser = 'dimon'
GROUP BY
touserpol, statusto) t
GROUP BY
pol, `status`;
Запрос собирает в табличку количество друзей у пользователя, разбивая на количество по статусу и полу... табличка будет подобного вида:
cnt pol status
7 Мужской +
3 Мужской
4 Женский
3 Женский +
Спустя 6 минут, 48 секунд (6.05.2010 - 13:17) dr_Lev написал(а):
А вот выборка из это таблицы
$query = mysql_query($sql);
$kolvo_vsego = 0;
$kolvo_devushek = 0;
$kolvo_parni = 0;
$kolvo_new = 0
while ($row = mysql_fetch_assoc($query)){
$kolvo_vsego += $row['cnt'];
if ($row['pol'] == 'Женский'){
$kolvo_devushek += $row['cnt'];
}else{
$kolvo_parni += $row['cnt'];
}
if ($row['status'] != '+'){
$kolvo_new += $row['cnt'];
}
}
Спустя 56 минут, 7 секунд (6.05.2010 - 14:13) web-monster написал(а):
Спасибо! Всё работает!