2013-08-27 86 views
-1

如何解決此查詢?如果存在其他問題?

IF EXISTS(SELECT * FROM鏈接WHERE年齡= '10' )

SELECT * FROM鏈接WHERE年齡= '10' ORDER BY

ELSE

SELECT * FROM鏈接ORDER BY

因此,如果一個鏈接存在10天,那麼它將被顯示,否則它將是隨機的。

+0

你說:「如果* A *存在鏈接,則* it *會......」這意味着你將只是一個取行。你是否需要'年齡='10''的所有行? – spencer7593

回答

0

我想你可以寫:

SELECT * 
    FROM links 
WHERE age = '10' 
    OR NOT EXISTS 
     (SELECT 1 
      FROM links 
      WHERE age = '10' 
     ) 
ORDER 
    BY RAND() 
LIMIT 1 
; 

。 。 。但我不確定它會表現如何。它可能更有意義,只要運行查詢WHERE age = '10',然後運行其他查詢只有當第一個返回沒有結果。

+0

如果10歲以下的鏈接不存在,此查詢不會給出隨機鏈接? – Gruffer

+0

@ user2700729:如果有的話,這將返回'age ='10''的所有行;否則,它將返回所有行。你是說,而不是返回*所有*行,它應該只返回*一個*行?通過「隨機」,你是否意味着你不關心它返回哪一行,或者你是否說你確實想要隨機? – ruakh

+0

總是會有1個條目只有特定的年齡。所以,我想這樣的:)如果不存在(SELECT * FROM鏈接WHERE年齡= '10' ) SELECT * FROM鏈接WHERE年齡= '10' ORDER BY RANDOM ELSE SELECT * FROM鏈接ORDER BY RANDOM – Gruffer

1

你有兩個不同的查詢 - 用一個聯盟:

SELECT * 
FROM links 
WHERE age = '10' 
UNION ALL 
SELECT * 
FROM links 
WHERE NOT EXISTS (SELECT * FROM links WHERE age='10') 
ORDER BT RAND()