1

私は Msqli を使用してマルチクエリを作成しています。クエリは、phpmyadmin 内で必要なのとまったく同じように機能します。

mysqli ではもう動作しません。クエリはサーバー間で変わりませんでした。

以下のクエリは、以前の LAMP インストールでは機能していましたが、現在では機能していません。

$SQLquery ='set @type = \'\';
set @num  = 1;
SELECT 
RA.`DATE` as DATES, 
RA.`ADDR` as ADDR,
RA.`QID` as QID, 
RT.`TAGS` as TAG,
Q.`id` AS QUID,
Q.`ADDR` AS QADDR, 
Q.`ORIGINALTEXT` AS QTEXTS, 
Q.`DATE` AS QDATES, 
cs.`id` AS CUID,
cs.`ADDR` AS CADDR, 
cs.`ORIGINALTEXT` AS CTEXTS, 
cs.`DATE` AS CDATES,
sol.`id` AS SUID, 
sol.`ORIGINALTEXT` AS STEXTS,
sol.`ADDR` AS SADDR, 
sol.`DATE` AS SDATES,
prj.`id` AS PUID,  
prj.`ORIGINALTEXT` AS PTEXTS, 
prj.`ADDR` AS PADDR,
prj.`DATE` AS PDATES, 
Max(Q.`DATE` ) AS Q, 
Max(cs.`DATE` ) AS C, 
Max(sol.`DATE` ) AS S, 
Max(prj.`DATE` ) AS P,
#@num as row_number 
@num:= if(@type = RA.`ADDR`, 1+@num, 1)  as v_number,
@type := RA.`ADDR` as dummy
FROM        (SELECT `id`,`TAGS`, `QID`    from `REL_TAG` ) AS RT 
 inner Join (SELECT `DATE`, `ADDR`, `QID` from `REL_ADDR` order by DATE) AS RA ON ( RT.`QID` = RA.`QID`) 
 Left outer Join (SELECT `id`,`DATE`, `ADDR`, `QID`, `ORIGINALTEXT` FROM `QUESTION`) AS Q ON ( RT.`QID` = Q.`QID`) and Q.`ADDR` = RA.`ADDR`
 Left outer Join (SELECT `id`,`DATE`, `ADDR`, `QID`, `ORIGINALTEXT` FROM `CASES` order by `CASES`.`DATE`) AS cs ON ( RT.`QID` = cs.`QID`) and cs.`ADDR` = RA.`ADDR` 
 Left outer Join (SELECT `id`,`DATE`, `ADDR`, `QID`, `ORIGINALTEXT` FROM `SOLUTION` order by `SOLUTION`.`DATE`) AS sol ON ( RT.`QID` = sol.`QID`) and sol.`ADDR` = RA.`ADDR`
 Left outer Join (SELECT `id`,`DATE`, `ADDR`, `QID`, `ORIGINALTEXT` FROM `PROJECT`  order by `PROJECT`.`DATE`) AS prj ON ( RT.`QID` = prj.`QID`) and prj.`ADDR` = RA.`ADDR`
where RT.`QID` = \''.NbOnly($Fetchmodifier).'\' Group by `QID`, addr, v_number LIMIT '.$Anstart.' ,'.$Ansnb.';';

更新 クエリはログにエラーを返さず、何も返さない (null) だけです。

MySQLi マルチクエリを実行するための PHP コードは次のとおりです。

$mysqlin = new mysqli("localhost", "user", "pass", "db");
if (mysqli_error($mysqlin)) {
     outputdataXML(sprintf("Connect Problem : %s\n", mysqli_error($mysqlin)));
     exit();
}
if ($mysqlin->multi_query($SQLquery)) {
    do {
          if ($result = $mysqlin->store_result()) {
               while ($row = $result->fetch_array(MYSQLI_BOTH)) {
                   if( $Foundrows = $row[0]){ //Maybe the problem is here ?
                     $Outputvalue[] = FormatFile($row);
                   }
               }
               $result->free();
          }
          if ($mysqlin->more_results()) {
          }
       } while ($mysqlin->more_results() && $mysqlin->next_result());
}
$mysqlin->close(); 
4

1 に答える 1

1

私は問題を発見しました, テーブルのすべてではありませんがいくつかがでした, レコードなしのように,

ダミーのレコードを追加しました各テーブルに、レコードがあるテーブルとないテーブルがあり、クエリが一致しなくても、結合は適切に行われるようになりました。

これが多くの人に役立つことを願っています。

MySQL の「結合」を使用する場合、結合されたテーブルのそれぞれすべてに1 つのレコードが必要です。例: 0, 00-00-0000, Null , 0, empty

そうして初めて、クエリに含まれるすべての結合テーブルが機能します。

于 2012-09-21T08:10:44.173 に答える