2014-03-19 44 views
-1

問題: 如果我將LIMIT更改爲我的IN語句中有多少結果,此查詢將只顯示正確的答案。目標: - 我希望我的變量(汽車,貨車,自行車,公共汽車)的金額等於限額上的金額。Mysql查詢挑選最高ID使用「WHERE IN」和LIMIT,沒有返回足夠的結果

我的IN語句實際上是一個變量,可以有1-50個項目(卡車,出租車等),但爲了方便我已經使用了4.如果它有3個項目,我必須將LIMIT更改爲3等等。

我可以做一個查詢,然後爆炸到數組中,並計算項目使用這個數字作爲變量添加到極限,但這是2個查詢!

易於閱讀查詢: -

$result = mysql_query("SELECT total FROM table1 WHERE client='$client' 
and campaign IN ('Car', 'Van', 'Bike', 'Bus') ORDER BY id DESC limit 4"); 

車,廂式車,自行車和公共汽車來自數據庫查詢自己....

$result = mysql_query("SELECT rules FROM combined WHERE groupname='$groupname'"); 

這產生'汽車' ,'Van','Bike','Bus'

模擬數據: - 車= 1,凡 = 2, 自行車= 3, 巴士= 4

此查詢的答案是1 + 2 + 3 + 4 但如果我在競選那裏有5規則在部分它將是相同的,因爲它只提取4答案不是5 所以它仍然只加1 + 2 + 3 + 4,因爲限制是4不是現在5.

粗體部分實際上是存儲在數據庫中,並添加了斜槓。 $ rule = 'Car','Van','Bike','Bus';

真正的mysql的語句是如下: -

$result = mysql_query("SELECT total FROM table1 WHERE client='$client' 
and campaign IN ($rule) ORDER BY id DESC limit 4"); 

=============================== ============================================================== 說明

以下查詢獲取我這個數據(「汽車」,「範」,「自行車」,「總線」)

$result = mysql_query("SELECT rules FROM combined WHERE groupname='$groupname'"); 

我把這個在一個變量名爲$規則

我然後運行此查詢

$result = mysql_query("SELECT total FROM table1 WHERE client='$client' 
and campaign IN ($rule) ORDER BY id DESC limit 4"); 

這將返回一個數爲每個這些(總轎車= 1,總爲範= 2)

問題是,當存在多於4中我的$規則,因爲限制,它不會返回超過4。我必須每次都改變它。

我可以結合兩個querys ....並獲得每個車,範,自行車運動的最高ID。(出現在我的IN語句或$規則中)

希望這可以讓它更清晰。

+0

我不明白什麼是你的問題。你是否想要所有值的數量(然後使用SQL關鍵字MAX,SUM,MIN或COUNT)或者你的問題是什麼? – vandango

+0

當我在返回的結果中收到4個項目時,我有一個硬編碼的LIMIT,但結果發生變化,所以LIMIT應該是這樣。有沒有更好的方式也許加入這兩個querys在一起.....類似這個問題的問題http://stackoverflow.com/questions/5987529/mysql-get-one-row-for-each-item -in-the-in-clause-efficient?answertab = votes#tab-top – Mikeys4u

+0

你究竟想要得到什麼?你最終的目標是什麼?我不明白爲什麼需要這個限制,我們不明白你想要什麼結果。 – CodeBird

回答

0

我不知道這是真的,你需要什麼,但它回答我的問題的解釋:

SELECT total 
FROM table1 
JOIN (
    SELECT MAX(id) as id 
    FROM table1 
    WHERE campaign IN ('Car', 'Van', 'Bike', 'Bus') 
    GROUP BY campaign 
) t ON t.id = table1.id