Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/264.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 帮助查询_Php_Mysql_Sql - Fatal编程技术网

Php 帮助查询

Php 帮助查询,php,mysql,sql,Php,Mysql,Sql,我有一个功能,通过id获取所选用户的评分, 它从一种类型的事物获得评级,一种不同类型事物的评级,然后做a+b 我知道它不是很优化,但我专注于使所有的工作 我是这样做的 function votos_usuario($id){ $previa = "SELECT id FROM preguntas WHERE id_usuario = '$id'"; $r_previo = mysql_query($previa);

我有一个功能,通过id获取所选用户的评分, 它从一种类型的事物获得评级,一种不同类型事物的评级,然后做a+b

我知道它不是很优化,但我专注于使所有的工作

我是这样做的

    function votos_usuario($id){

            $previa = "SELECT id FROM preguntas WHERE id_usuario = '$id'";
            $r_previo = mysql_query($previa);
            $ids_p = '0, ';
            while($items_previos = mysql_fetch_array($r_previo)){
                $ids_p .= $items_previos['id'].", ";
                //echo "ids pregunta usuario: ".$items_previos['id']."<br>";
            }
            $ids = substr($ids_p,0,-2);
            //echo $ids;

            $consulta = "SELECT valor FROM votos_pregunta WHERE id_pregunta IN ( $ids )";
            //echo $consulta;

           $resultado = mysql_query($consulta);
           $votos_preguntas = 0;
           while($voto = mysql_fetch_array($resultado)){
             $votos_preguntas = $votos_preguntas + $voto['valor'];
           }
//$votos_preguntas= 0;
//$votos_preguntas = mysql_query("SELECT SUM(valor) FROM votos_pregunta WHERE id_pregunta IN (SELECT id FROM preguntas WHERE id_usuario = '$id')");


           $previa_r = "SELECT id FROM recetas WHERE id_usuario = '$id'";
            $r_previo_r = mysql_query($previa_r);
            $ids_r = '0, ';
            while($items_previos_r = mysql_fetch_array($r_previo_r)){
                $ids_r .= $items_previos_r['id'].", ";
                //echo "ids pregunta usuario: ".$items_previos['id']."<br>";
            }
            $ids = substr($ids_r,0,-2);
            $consulta_b = "SELECT valor FROM votos_receta WHERE id_receta IN ( $ids )";
            //echo $consulta;

           $resultado_b = mysql_query($consulta_b);
           $votos_recetas = 0;
           while($voto_r = mysql_fetch_array($resultado_b)){
             $votos_recetas = $votos_recetas + $voto_r['valor'];
           }





            $total = $votos_preguntas + $votos_recetas;
            return $total;

        }
现在的问题是

我怎样才能让所有用户都按等级desc订购????我就是看不见:是的

SELECT uid, SUM(Votes)
FROM (
    SELECT p.id_usuario uid, SUM(vp.valor) votes
    FROM preguntas p JOIN votos_pregunta vp ON p.id = vp.id_pregunta 
    GROUP BY p.id_usuario
    UNION ALL
    SELECT r.id_usuario uid, SUM(vr.valor) votes
    FROM recetas r JOIN votos_receta vr ON r.id = vr.id_receta 
    GROUP BY r.id_usuario
) rs
GROUP BY uid
ORDER BY SUM(Votes) DESC
除了php循环和所有子查询之外,您还可以使用这个查询来获得所需的内容:

SELECT (
    SELECT SUM(vp.valor) 
    FROM preguntas p JOIN votos_pregunta vp ON p.id = vp.id_pregunta 
    WHERE p.id_usuario = '$id')
    + (
    SELECT SUM(vr.valor)
    FROM recetas r JOIN votos_receta vr ON r.id = vr.id_receta 
    WHERE r.id_usuario = '$id'
    )

另外,当您只在结果数组中使用关联键时,使用mysql\u fetch\u assoc比mysql\u fetch\u数组快得多


当您仅使用数字键时,同样适用于使用mysql_fetch_row。

当您仅使用结果数组关联键时?