我越來越沮喪,因爲我不明白爲什麼在我的SELECT和UNION中我缺少一些字段。 我讀了關於這方面的優秀文檔,並遵循了最常見的示例,避免在第一個和第二個SELECT之間獲得不同數量的列。MySql UNION SELECT缺少字段
它增加了在兩個語句之間添加偶數列的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
?如果我反轉這兩個SELECT,它恰好相反,只考慮GC.Name,GC.Pax,GC.Start
並避開其他列。
我不太習慣這種查詢,這是我第一次處理這個問題。我敢肯定,我失去了一些東西,但我不明白是什麼
我可能會錯過這裏的東西 - 但爲什麼你使用這個工會? Union用於具有相同數據結構的多個查詢。這看起來像是在單一結果中將旅舍數據與客戶數據結合起來,這可以通過各種連接來完成,並且可能產生更多可讀結果 –
第一個查詢具有'groupno',第二個查詢具有'numnights',而他們不排隊。 –
@KaiQing你有理由,但在這種情況下,記錄將被安排在一個單一的數組,因爲他們有很多共同點,即使名稱可能不同。問題是我得到了一個非常大的數組,我需要對提高性能的結果進行分頁。我曾嘗試使用array_slice進行分頁,但加載記錄的問題當然存在 –