簡體   English   中英

Typo3 LTS9 Doctrine:如何使用 mysql @-Variables?

[英]Typo3 LTS9 Doctrine: How to use mysql @-Variables?

使用mysql @-variables 執行以下typo3 SELECT 的正確方法是什么:

$dbConnection = GeneralUtility::makeInstance(ConnectionPool::class)->getConnectionForTable($extensionTable);
$queryBuilder = $dbConnection->createQueryBuilder();

$query = $queryBuilder
->select('extensionTable.*',
'@dist:=ACOS(ROUND(SIN(RADIANS(geo.coord_lat)) * SIN(RADIANS(52.5234743092278))
   + COS(RADIANS(geo.coord_lat)) * COS(RADIANS(52.5234743092278))
   * COS(RADIANS(geo.coord_lon)      - RADIANS(13.4122033308763)),10)) * 6380 AS distance',
'@distgrp:=CASE WHEN @dist <10 THEN 1 WHEN @dist<25 THEN 2 ELSE truncate(((@dist-25)/25)+3, 0) END AS dist_group')
->from('extensionTable  LEFT JOIN geoTable AS geo ON geo.zip=extensionTable.zip')
->where('pid IN (15,16)');

它不起作用,typo3 在 @dist var 之前插入了一個 '。 不好的結果是:

SELECT 'extensionTable'.*, '@dist:=... ' AS 'distance';

錯誤:執行時發生異常...您的 SQL 語法有錯誤;

相關主題(解決方案不適用於 $queryBuilder->select() ): 如何在學說中使用 mysql 變量

我希望有一個人可以幫助我。 :-)(或者我必須使用直接的 php mysqli() 查詢。)

您可以使用selectLiteral防止轉義。

$queryBuilder
  ->select(...)
  ->addSelectLiteral('@dist:=COS(RADIANS(90))')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM