Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.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 Order By - Fatal编程技术网

使用变量PHP传递订单

使用变量PHP传递订单,php,mysql,sql-order-by,Php,Mysql,Sql Order By,我有下一个代码,但使用ORDER by无法获得所需的结果: //OrderBy WHERE条件 如果($sort\u by==“0”)$sortby\u condition=“ORDER by mv\u user\u ranking.ranking\u date DESC”; 如果($sort_by==“1”)$sortby_condition=“ORDER by mv_user_info.age DESC”; 如果($sort\u by==“2”)$sortby\u condition=“OR

我有下一个代码,但使用ORDER by无法获得所需的结果:

//OrderBy WHERE条件
如果($sort\u by==“0”)$sortby\u condition=“ORDER by mv\u user\u ranking.ranking\u date DESC”;
如果($sort_by==“1”)$sortby_condition=“ORDER by mv_user_info.age DESC”;
如果($sort\u by==“2”)$sortby\u condition=“ORDER by mv\u user\u info.sex DESC”;
$query=“从mv\u用户信息中选择*
LEFT JOIN mv_user_lang_Interest ON mv_user_lang_Interest.uid=mv_user_info.uid
在mv_user_disposibility.uid=mv_user_info.uid上左键连接mv_user_disposibility
在mv_user_ranking.uid=mv_user_info.uid上左键加入mv_user_排名
其中国家=“$country”和城市=“$city”和
mv_user_lang_interest.english='1'和
mv_user_lang_interest.english_level='2'和
mv_user_info.uid!=“$uid”
.$sortby_条件。
“限制0,50”;
echo$query;
$result=mysql\u query($query)或die(mysql\u error());

我做错了什么?

从技术上讲,我看不出该查询有任何问题,但您可以做一件事:在该查询上创建另一个查询,使该查询成为子查询,然后从上述查询排序。您的代码如下所示:

// OrderBy WHERE Conditions
if ($sort_by == "0")    $sortby_condition = "ORDER BY ranking_date DESC ";
if ($sort_by == "1")    $sortby_condition = "ORDER BY age DESC ";
if ($sort_by == "2")    $sortby_condition = "ORDER BY sex DESC ";

//Note I have removed the table name from order by clause because in the super-query we will only have column name.

$query ="
Select * From (
 SELECT * FROM mv_user_info 
     LEFT JOIN mv_user_lang_interested ON mv_user_lang_interested.uid = mv_user_info.uid        
     LEFT JOIN mv_user_disponibility   ON mv_user_disponibility.uid   = mv_user_info.uid    
     LEFT JOIN mv_user_ranking         ON mv_user_ranking.uid         = mv_user_info.uid   

     WHERE country ='$country' AND city = '$city' AND
           mv_user_lang_interested.english = '1' AND
           mv_user_lang_interested.english_level = '2' AND 
           mv_user_info.uid != '$uid'
     LIMIT 0, 50) as a ".$sortby_condition;

echo $query;

$result = mysql_query($query) or die(mysql_error());

我希望这有帮助

这看起来很有趣,好吧,让我们试试

// OrderBy WHERE Conditions
//i don't know what was passed as $sort_by value
//perhaps you may try 
$sort_by = (integer)$sort_by;  //casting 

if ($sort_by == 0){$sortby_condition = "ORDER BY mv_user_ranking.ranking_date DESC ";}//if () if() three times not an optimize way, try if, elseif
elseif ($sort_by == 1){    $sortby_condition = "ORDER BY mv_user_info.age DESC ";}//write your code in block "{}" this may prevent your block of statement mix
elseif ($sort_by == "2"){    $sortby_condition = "ORDER BY mv_user_info.sex DESC ";}

$query ="SELECT * FROM mv_user_info 
         LEFT JOIN mv_user_lang_interested ON mv_user_lang_interested.uid = mv_user_info.uid        
         LEFT JOIN mv_user_disponibility   ON mv_user_disponibility.uid   = mv_user_info.uid    
         LEFT JOIN mv_user_ranking         ON mv_user_ranking.uid         = mv_user_info.uid   

         WHERE country ='$country' AND city = '$city' AND
               mv_user_lang_interested.english = '1' AND
               mv_user_lang_interested.english_level = '2' AND 
               mv_user_info.uid != '$uid'"

    .$sortby_condition.

    "LIMIT 0, 50";

echo $query;

$result = mysql_query($query) or die(mysql_error());
如果有什么问题尽管问
你最好把整行文字都写对,这样我们才能更好地回答你:)

看起来没问题。。。您是否尝试在phpmyadmin或类似工具中查看结果(您回显)查询返回的内容?“我没有得到所需的结果”这就像是忽略了按句子排序。变量
$sort\u by
没有您期望的值。检查其值。echo
$sort\u by
查看值是什么。您可以将其更改为
if/elseif/else
,以在值不是
0,1,2