UNIONを使用したSELECTでいくつかのフィールドが欠落している理由がわからないため、ますますイライラしています。これに関する優れたドキュメントを読み、最も一般的な例に従って、最初の SELECT と 2 番目の SELECT の間で異なる数の列を取得しないようにしました。
これは、2 つのステートメントの間に偶数の列に達する NULL 列を追加することで構成されます。
ここに私の場合:
$query = "(SELECT GC.GroupNO AS GroupNO,
GC.Name AS Name,
GC.Pax AS Pax,
GC.Start AS Start,
NULL AS custid,
NULL AS firstname,
NULL AS lastname,
NULL AS arrivaldate,
NULL AS hour,
NULL AS pax,
NULL AS cctype,
NULL AS created,
NULL AS sid,
NULL AS ref_source,
NULL AS numnights
FROM LargeGroupHostels, GroupContacts AS GC
WHERE LargeGroupHostels.HostelNumber = %d
AND LargeGroupHostels.Status = %s
AND LargeGroupHostels.GroupNO = GC.GroupNO";
AND GC.Start < %s
ORDER BY LastUpdated DESC LIMIT %d, %d
)UNION(
SELECT
NULL AS GroupNO,
NULL AS Name,
NULL AS Pax,
NULL AS Start,
`custid`,
`firstname`,
`lastname`,
`arrivaldate`,
`hour`,
`pax`,
`cctype`,
`created`,
`sid`,
`ref_source`,
datediff(departdate, arrivaldate) AS numnights
FROM customer_details
WHERE hostelnumber = %d
AND lastupdated = "" AND status != "CANX"
AND booking_type IN ("HOSTEL", "HOSTELPACK")
ORDER BY customer_details.arrivaldate, customer_details.created
LIMIT %d, %d )
';
私が知っているいくつかの最適化といくつかの変更は別として、ここでの私の質問は次のとおりです。-列を取得しないのはなぜGC.Name,GC.Pax,GC.Start
ですか? GC.Name,GC.Pax,GC.Start
2 つの SELECT を逆にすると、他の列だけを考慮して回避すると、まったく逆のことが起こります。
私はこの種のクエリについてあまり練習していません。これを処理するのは初めてです。私は何かが欠けていると確信していますが、何がわかりません