简体   繁体   English

如何将相同类型的查询与不同的变量结合起来

[英]How to combine same kind of queries with different variables

I'm trying to combine my SQL queries and fetch their results all at once.我正在尝试组合我的 SQL 查询并一次获取它们的结果。 I tried many JOIN methods but they all failed.我尝试了很多 JOIN 方法,但都失败了。

As performance matters for my site, I don't want to fetch them seperately and want to combine all of them.由于性能对我的网站很重要,我不想单独获取它们并希望将它们全部结合起来。 Which method is the best way for that?哪种方法是最好的方法? I need to learn a clear way of doing this, because I will implement all of my similar queries in same way.我需要学习一种清晰的方法来做到这一点,因为我将以相同的方式实现所有类似的查询。

$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: I'm aware that mysql_query is deprecated and I need to upgrade to either PDO or mysqli_query. PS:我知道 mysql_query 已被弃用,我需要升级到 PDO 或 mysqli_query。 However, I need to use mysql_query for a special reason in this project.但是,我需要在这个项目中出于特殊原因使用 mysql_query。

You can use conditional aggregation with a join to return all records in a single row:您可以使用带有join conditional aggregation来返回单行中的所有记录:

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'

This assume uye has unique records on the id field.这假设uye在 id 字段上有唯一的记录。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM