私は現在、以下のmysqlクエリを使用していますが、いくつかの大きな再コーディングが行われているため、このクエリのほんの一部を使用する必要がありますそのままで。 現在のクエリは、私が使用したい部分がより大きいmysqlクエリのセクションを独立して抽出する
SELECT region FROM postcode2region
WHERE ab.entry_postcode REGEXP
CONCAT("^", postcode_prefix, "[:digit:]*")
ORDER BY postcode_prefix DESC LIMIT 1
ある
$sql = sprintf('INSERT INTO FENQUIRY
(ENREGION, ENNAME, ENCOMP, ENADD1, ENADD2, ENADD3, ENCNTY,
ENPCODE, ENCNTRY, ENTEL, ENDATE, ENDATELCON, ENCAT,
ENCONSRS, ENADVER, ENTYPE, EN_CUSTOMER_ID)
SELECT
(SELECT region
FROM postcode2region
WHERE ab.entry_postcode REGEXP
CONCAT("^", postcode_prefix, "[:digit:]*")
ORDER BY postcode_prefix DESC LIMIT 1
) AS ENREGION,
c.ENCONNAME AS ENNAME,
IF(ab.entry_company <> "", ab.entry_company,
CONCAT(c.ENCONNAME, " - online")) AS ENCOMP,
ab.entry_street_address AS ENADD1,
ab.entry_suburb AS ENADD2,
ab.entry_city AS ENADD3,
ab.entry_state AS ENCNTY,
ab.entry_postcode AS ENPCODE,
cc.countries_name AS ENCNTRY,
c.ENCONTEL AS ENTEL,
CURDATE() AS ENDATE,
CURDATE() AS ENDATELCON,
"X" AS ENCAT,
1 AS ENCONSRS,
"WWW" AS ENADVER,
"70" AS ENTYPE,
c.ENCON_ID AS EN_CUSTOMER_ID
FROM FENQCON c
LEFT JOIN address_book ab
ON ab.address_book_id = c.ENCON_ZEN_DEFAULT_ADDRESS_ID
LEFT JOIN countries cc
ON cc.countries_id = ab.entry_country_id
WHERE c.ENCON_ID = %d
LIMIT 1',
$_SESSION['customer_id']);
ですが、私は一人でいることを実行する場合、それは明らかにそれが何であるかab.entry_postcode知らないことを報告したので、私が試しました
SELECT region FROM postcode2region
WHERE (SELECT entry_postcode FROM address_book REGEXP
CONCAT("^", postcode_prefix, "[:digit:]*"))
ORDER BY postcode_prefix DESC LIMIT 1
しかし、#1064というエラーメッセージが表示されます。 - SQL構文にエラーがあります。 'REGEXP CONCAT( "^"、postcode_prefix、 "[:digit:] *")の近くで使用する正しい構文については、MySQLサーバのバージョンに対応するマニュアルをチェックしてください。ORDER BY postcode_prefix DESC' on line 1
In要するに、クエリは、address_bookテーブルのentry_postcodeという名前のフィールドに格納されているポストコードを見て、そのポストコードの先頭の文字だけを取り出し、postcode2regionテーブルの領域フィールドから一致するデータをフェッチすることになっています。
私はそれが単一のクエリで実行できるはずですが、私はそれを解決するために管理していないと確信しています。そうでない場合、私は2つのクエリとしてそれを行います。
ご協力いただければ幸いです。