2016-07-11 4 views
-1

以下の既存のクエリは完全に機能します。しかし、私はこれらの結果が表示される領域の順序を決定する新しいフィールドを持っています。フィルターではなく並べ替えを行う

例:ユーザーがウェブサイト1(ID 123)を閲覧している場合、123および234と543のすべてのレコード を表示する必要がありますが、まずエリアID 123の記録を行い、次に234と543の記録を既存の注文。これを領域とする変数は常に$AreaIDです。

私はどこかさえ私に方向性を与えるために例を見つけることができませんcont_id ASC順

で、私はその領域でレコードをフィルタリングしていないです、私は単純にすべての他の上にその領域のレコードを入れたい覚えておいてください私は実験することができます。私は何か別々にそれらを選択しなければならないと思いますか?

$sql = "select * 
    from 202_articles 
    where cont_date_published <= CURDATE() 
    and cont_time_published < CURTIME() 
    and cont_category_id = $TypeID 
    ORDER by cont_id ASC 
    LIMIT 25"; 

助けてください。

+0

あなたは 'group by'を見ましたか? – atoms

+2

日時を単一のエンティティとして格納することを真剣に考えてください。そして、これを真剣に考えたら、この簡単な2ステップのアクション・コースに従うことを検討してください。1.まだ実行していない場合は、適切なCREATE文とINSERT文(および/またはsqlfiddle)を提供して、問題を再現する。 2.まだ実行していない場合は、手順1で提供された情報に対応する望ましい結果セットを提供します。 – Strawberry

+0

[mysql SQL:特定のアイテムの重複の可能性があります。 ://stackoverflow.com/questions/5417980/mysql-sql-specific-item-to-be-first-and-then-to-sort-the-rest-of-the-items) –

答えて

0
$sql = "select * 
from 202_articles 
where cont_date_published <= CURDATE() 
and cont_time_published < CURTIME() 
and cont_category_id = $TypeID 
ORDER by cont_id ASC 
LIMIT 25"; 

この領域を知っている場合は、上記の代わりに次のクエリを使用できます。

$sql = "select * 
from 202_articles 
where cont_date_published <= CURDATE() 
and cont_time_published < CURTIME() 
and cont_category_id = $TypeID 
ORDER by cont_id='$userarea' ASC, cont_id ASC 
LIMIT 25"; 
1

最初にその条件でソートするケースを使用し、その後、あなたはAreaIDという名前の列を持っていると仮定すると:

$sql = "select * 
from 202_articles 
where cont_date_published <= CURDATE() 
and cont_time_published < CURTIME() 
and cont_category_id = $TypeID 
ORDER by 
CASE WHEN AreaID = $AreaID THEN 0 ELSE 1 END, 
AreaID, 
cont_id ASC 
LIMIT 25"; 
+1

ありがとう!あなたの提案と上記の複製のリンクが混在して、このトリックが行われました! - QUERYに条件が存在する可能性があることはわかりませんでした。新しい何か! – Cavemanharris

0

あなたが特定のcont_idですべてを選択するには、簡単なUNION JOINでこれを行うことができ、その後、cont_id ASC

SELECT 
    * 
FROM 
    202_articles 
WHERE 
    cont_date_published <= CURDATE() 
AND cont_time_published < CURTIME() 
AND cont_category_id = $TypeID 
AND cont_id = $AreaID 
UNION 
    SELECT 
     * 
    FROM 
     202_articles 
    WHERE 
     cont_date_published <= CURDATE() 
    AND cont_time_published < CURTIME() 
    AND cont_category_id = $TypeID 
    ORDER BY 
     cont_id ASC 
    LIMIT 25 

POCによって他のすべての順序を選択します。http://sqlfiddle.com/#!9/3ae07/1

関連する問題