我正在尝试组合我的SQL查询并一次性获取结果。我尝试了很多JOIN方法,但都失败了。
由于性能对我的网站很重要,我不想单独获取它们并想要将它们全部组合在一起。哪种方法最好的方法呢?我需要学习一种明确的方法,因为我将以同样的方式实现所有类似的查询。
$kacinci = mysql_query("SELECT
COUNT(*) AS rank
FROM uye
WHERE bakiye>=(SELECT bakiye FROM uye WHERE ID='$profilid')");
$kacincix = mysql_fetch_array($kacinci);
$kackatinahafta = mysql_query("SELECT
COUNT(*) AS rank
FROM uye
WHERE kackatinahafta>=(SELECT kackatinahafta FROM uye WHERE ID='$profilid')");
$kackatinahaftax = mysql_fetch_array($kackatinahafta);
$nekadarhafta = mysql_query("SELECT
COUNT(*) AS rank
FROM uye
WHERE nekadarhafta>=(SELECT nekadarhafta FROM uye WHERE ID='$profilid')");
$nekadarhaftax = mysql_fetch_array($nekadarhafta);
$kackatinaay = mysql_query("SELECT
COUNT(*) AS rank
FROM uye
WHERE kackatinaay>=(SELECT kackatinaay FROM uye WHERE ID='$profilid')");
$kackatinaayx = mysql_fetch_array($kackatinaay);
$nekadaray = mysql_query("SELECT
COUNT(*) AS rank
FROM uye
WHERE nekadaray>=(SELECT nekadaray FROM uye WHERE ID='$profilid')");
$nekadarayx = mysql_fetch_array($nekadaray);
PS:我知道不推荐使用mysql_query,我需要升级到PDO或mysqli_query。但是,我需要在此项目中使用mysql_query作为特殊原因。
答案 0 :(得分:1)
您可以conditional aggregation
使用join
来返回一行中的所有记录:
select
sum(case when u.bakiye >= u2.bakiye then 1
else 0 end) bakiye_count,
sum(case when u.kackatinahafta >= u2.kackatinahafta then 1
else 0 end) kackatinahafta_count,
sum(case when u.nekadarhafta >= u2.nekadarhafta then 1
else 0 end) nekadarhafta_count,
...
from uye u
join uye u2 on u2.id = '$profilid'
这假设uye
在id字段上有唯一记录。