命令在正确的代码中不同步

时间:2016-06-19 15:14:33

标签: php mysql

我通过PHP执行了以下查询,它曾经像昨天一样工作,并且今天停止了工作,在这里:

SELECT 
    *, 
    (SELECT IF (pro.uid= '4342','True','False') FROM pro) AS 'uid' 
FROM 
    Episodes, pro 
ORDER BY 
    Episodes.id DESC 
LIMIT 9

' 4342'使用GET参数更改,我有以下错误:

  

命令不同步;你现在不能运行这个命令

我的PHP API如下(片段):

<?php 
include_once "db_config.php"; 

DEFINE ('DB_HOST', $host); 
DEFINE ('DB_USER', $user);      
DEFINE ('DB_PASSWORD', $pass); 
DEFINE ('DB_NAME', $database); 

$mysqli = @($GLOBALS["___mysqli_ston"] = mysqli_connect(DB_HOST,  DB_USER,  DB_PASSWORD)) OR die ('Could not connect to MySQL'); 
@((bool)mysqli_query($GLOBALS["___mysqli_ston"], "USE " . constant('DB_NAME'))) OR die ('Could not select the database'); 

?> 

<?php 

 if(isset($_GET['meaE'], $_GET['uid']))
    { 
         $query="SELECT * , (SELECT  IF (pro.uid=    '".$_GET['uid']."','True','False') FROM pro ) AS 'uid' FROM Episodes,pro  ORDER   BY Episodes.id DESC LIMIT 9
";             
          $resouter = mysqli_query($GLOBALS["___mysqli_ston"], $query); 

} 

$set = array(); 

$total_records = mysqli_num_rows($resouter); 
if($total_records >= 1){ 

  while ($link = mysqli_fetch_array($resouter,  MYSQLI_ASSOC)){ 

    $set['APITest'][] = $link; 
  } 
} 
 echo $val= str_replace('\\/', '/', json_encode($set)); 
 ?>

我希望得到以下输出:

    TABLE A       -  TABLE B 
ID NAME TEXT  UID -   Check_ID

我想要的查询:

从表A中选择*,检查是否&#34; 134123123&#34;存在于B中,如果是/否则为表A中所有采用的记录添加记录,其值为checked(True / False)。

@sagi查询发生了什么:

表B中有3条记录,表A中有10条记录,执行查询时,结果为30条记录,表B中的每条记录都有表A中的10条记录,&#34; uid&# 34;如果uid是“134123123”,则记录值为True,如果不是“134123123”,则记录值为false;如果不是,则为#134; 134123123&#39;&#39; 134123123&#39;

1 个答案:

答案 0 :(得分:2)

您的查询似乎有误,我不知道昨天是如何运作的,但是现在您正在交叉加入条件(可能是正确但我怀疑) - 这意味着episodes中的每条记录都将加入pro中的每条记录。此外,带有IF的子查询将返回多于1条记录,除非此表仅包含1条记录(这再次 - 我对此表示怀疑)。

试试这个:

SELECT distinct t.*, IF (s.uid is null,'True','False')  AS 'uid'
FROM Episodes t
Left JOIN pro s
 ON(s.uid = '4342') 
ORDER BY t.id DESC
LIMIT ?????

尝试使用子查询而不是连接:

Select t.*,
       Case when exists(select 1 from pro s where s.uid = '4342')
            Then 'true' else 'false' 
       End as 'uid'
From episodes t
Order by t.id desc
Limit 9;