0

これが私のSQLコードです。各行の価格と各行のマイルストーン、およびテーブルを結合するための ID を選択しましたが、1 行の結果しかありません。

複数のフィルターを実行する PHP コード:

if($i==0)
{
    if($fc == "projet")
    {
        $filtre_bdd .= "AND p.$fc = '$fv' ";
    }
    else 
    {
        $filtre_bdd .= "AND cible.$fc = '$fv' ";
        $i= $i + 2;
    }
}

SQL クエリ:

SELECT cible.prix,a.valeur,a.idroute,cible.id,p.id,
    SUM(DISTINCT a.valeur) AS total_avances, /* the milestone sum the unique one */
    SUM(a.valeur) AS total_avance, /* the milestone sum of each row */
    SUM(cible.prix) AS total_prix /* the price sum */
FROM avances AS a,routes AS cible,projets AS p
WHERE a.idroute = cible.id AND p.id = cible.idprojet $filtre_bdd /* the conditions to join the tables and do the filter */
GROUP BY cible.id, a.idroute 
HAVING total_avances <> cible.prix AND cible.prix - total_avances >- 1 

これらすべての条件で、価格の合計とマイルストーンの合計を取得するにはどうすればよいでしょうか? 対象のテーブルには、プロジェクトの ID とマイルストーンの ID が含まれています。各行のマイルストーンの合計と合計の合計を実行し、それをプロジェクトの価格と比較する必要があります。

4

2 に答える 2

0

次のクエリを使用してみてください:-

SELECT DISTINCT cible.prix, a.valeur, a.idroute, cible.id, p.id,
SUM(a.valeur) AS total_avances,
SUM(a.valeur) AS total_avance,
SUM(cible.prix) AS total_prix
FROM avances a INNER JOIN routes ciblE ON a.idroute = cible.id
INNER JOIN projets p ON p.id = cible.idprojet
GROUP BY cible.prix, a.valeur, a.idroute, cible.id, p.id,
HAVING total_avances <> cible.prix AND cible.prix - total_avances >- 1 

これがあなたを助けることを願っています。

于 2014-06-16T05:08:16.097 に答える
0

私は解決策を見つけましたありがとう

SELECT SUM(alucard.uu) as total_prix,SUM(alucard.vv) as total_avances FROM(
                                SELECT ultimate.id,SUM(ultimate.prix) as uu,SUM(ultimate.valeur) as vv FROM(
                                    SELECT e.id,e.prix,e.idprojet,e.valeur FROM(
                                        SELECT cible.id,cible.prix,cible.idprojet,a.valeur=4 AS valeur FROM avances AS a
                                            INNER JOIN routes cible ON a.idroute=cible.id 
                                            INNER JOIN projets p ON p.id=cible.idprojet $filtre_bdd 
                                             $date_bdd
                                            GROUP BY cible.id) AS e
                                    UNION 

                                    SELECT cible.id,cible.prix=4,cible.idprojet,SUM(a.valeur) FROM avances as a
                                        INNER JOIN routes cible ON a.idroute=cible.id 
                                        INNER JOIN projets p ON p.id=cible.idprojet $filtre_bdd 
                                        $date_bdd
                                        GROUP BY cible.id) AS ultimate
                                    GROUP BY ultimate.id
                                    HAVING SUM(ultimate.prix)>SUM(ultimate.valeur) ) AS alucard
于 2014-06-17T12:45:30.703 に答える