2013-03-20 27 views
0

我想製作存儲過程,但我不知道應該採用哪種方法,或者甚至可以在MySQL中做到這一點。我應該爲這個查詢使用MySQL過程嗎?

讓我介紹你與我的問題。比方說,我有了這樣的列的表:

TABLE A 
id | Hotel | city_name | region_name | country 
1 | A | Amsterdam | North-Holland | Netherlands 
2 | B | Amsterdam | North-Holland | Netherlands 
3 | C | Leiden | North-Holland | Netherlands 
4 | D | Katwijk | North-Holland | Netherlands 
5 | E | Leiden | North-Holland | Netherlands 
6 | F | Katwijk | North-Holland | Netherlands 

我想我每次執行這個查詢和結果需要在這個以創建只得到3個結果:

  1. 如果有3個或更多的城市(用戶選擇在這種情況下,我們可以採取阿姆斯特丹),其city_name=Amsterdam然後在阿姆斯特丹返回隨機3個城市
  2. 如果有少於3條在阿姆斯特丹返回任何有阿姆斯特丹+返回隨機記錄,其中記錄的region=North-Holland但重新記錄的總量原來應始終是3(例如:我們有2條記錄,其中city= Amsterdam +我們取一個隨機記錄從region=North Holand; 例2:我們有一個記錄,其中city=Amsterdam +我們取2條隨機記錄,其中region="north Holland"

這是可能的這與SQL或者我應該得到所有的記錄在PHP中,然後遍歷每個記錄?

我可能需要通過2個參數中的步驟(CITY_NAME,區域)。

到目前爲止,我已經嘗試了一些基本的SQL查詢和我無法得到它的工作。

回答

2

你應該嘗試像

(SELECT * 
FROM A 
WHERE city_name = 'Amsterdam' 
ORDER BY RAND() 
LIMIT 3) 

UNION 

(SELECT * 
FROM A 
WHERE region = 'North Holand' AND city_name <> 'Amsterdam' 
ORDER BY RAND() 
LIMIT 3) 

LIMIT 3; 
+1

啊,這也行得通,但是你需要在第二個SELECT中排除city_name'Amsterdam',否則你可能會從第一個SELECT中選擇相同的記錄 – starshine531 2013-03-20 11:47:43

+1

WHERE region ='North Holand'AND city_name < >'阿姆斯特丹' – Jocelyn 2013-03-20 11:51:37

+0

@Jocelyn謝謝大家! – 2013-03-20 11:52:38

1

我會建議你做的這個邏輯部分主要是在PHP。儘管可以在sql中完成,但我發現sql中的邏輯結構往往難以遵循,而這在php中並不是問題。

在PHP這樣做的邏輯可能需要兩個單獨的查詢(但只有當你沒有得到最初3)。

我運行一個查詢來獲取最初的3(在SQL使用LIMIT 3)。檢查是否有三個結果。如果您沒有,則減去您從3得到的金額,然後在第二個查詢中將其用作LIMIT以獲得其他隨機結果。