2017-10-18 2 views
-2

나는SELECT 문의 ORDER?

$sub_query = "SELECT * FROM posts WHERE post_status = 'published' AND 
post_user = '{$out}' ORDER BY post_id DESC "; 

쿼리 포스트 ID를 내림차순으로 정렬 된 특정 사용자의 모든 게시물을 찾아온다 좋은 작품이 쿼리가 있습니다. 문제는 모든 게시자 사용자를 통해 반복되고 이에 따라 주문하지만 최근 게시자는 사용자 당 최신 게시물뿐만 아니라 전반적인 게시를 원합니다. 여기

결과의 이미지가 잘하면 더 나은 ORDER before SELECT statement ORDER before SELECT statement

ORDER before SELECT statement ORDER before SELECT statement

당신은 조회가 특정 사용자에 대해 실행 한 후 다음 사용자 곳으로 이동합니다 볼 수 있습니다 설명하는 데 도움이하는 것입니다 가장 최근의 게시자 ID를 먼저 얻으려고합니다.

나는 이것을 similar question에 따르려고했으나 동일한 결과를 가져 왔습니다. 에스.

$sub_query = "SELECT * FROM (SELECT * FROM posts ORDER BY post_id DESC) 
T WHERE post_status = 'published' AND post_user = '{$out}' "; 

내가 선택한 모든 게시물을 먼저 주문할 수 있습니까? 그런 다음 where 문을 사용하십시오. 당신은 사용자 당 최신 게시물을하려면

+4

이미지는 여기에서 원하는 것을 설명하기 위해 약간을한다. 질문을 수정하고 이미지를 삭제 한 다음 예상 결과와 함께 샘플 표 데이터를 표시하십시오. –

+1

** 경고 ** : 사용자 데이터가 쿼리 내에서 사용되므로 심각한 [SQL 주입 버그] (http://bobby-tables.com/)가 있습니다. 가능하면 ** prepared statements **를 사용하십시오. 이것들은 [mysqli] (http://php.net/manual/en/mysqli.quickstart.prepared-statements.php)와 [PDO] (http://php.net/manual/)에서 매우 간단합니다. en/pdo.prepared-statements.php) 어디에서 사용자가 제공 한 데이터는 나중에 사용되는 것에 따라'bind_param' 또는'execute'를 사용하여 채워지는'?'또는': name' 지시자로 지정됩니다. **'$ _POST','$ _GET' 또는 다른 사용자 데이터를 쿼리에 직접 입력하지 마십시오. – tadman

+0

여전히 메시지가 표시되지 않는 경우 질문에서 이미지를 제거하고 대신 https://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-for- 무엇보다 - 단순한 SQL 쿼리 – Strawberry

답변

0

, 다음 where를 제거하고 추가 할 limit :

SELECT p.* 
FROM posts p 
WHERE p.post_status = 'published' 
ORDER BY post_id DESC 
LIMIT 1; 
+0

post_user = '{$ out}'은 특정 사용자이므로 여전히 필요합니다 – Brad

+0

'AND'를 넣은 후 당신의'post_user = '{$ out}''. – Sand

+0

@Sand 에러를 반환 mysqli_fetch_assoc()은 매개 변수 1이 mysqli_result가 될 것으로 예상하고, – Brad

0

당신을 위해 무엇을 찾고있는 것은 1이면 내가 이해하지 못했다) 당 마지막 게시물 목록 사용자 2) 가장 최근에 정렬 된 모든 게시물 목록 (사용자와 상관없이) 두 경우 모두 모든 사용자를 반복 할 필요가 없으며 쿼리 자체를 사용하여 순서가 지정된 데이터를 추출 할 수 있습니다 (이 솔루션에 대해 강력하게 조언합니다.).

옵션 1 :

SELECT * 
FROM posts 
WHERE post_id IN (
    SELECT MAX(post_id) 
    FROM posts 
    WHERE post_status = 'published' 
    GROUP BY post_user 
) 
ORDER BY post_user ASC 

옵션 2 :

SELECT * 
FROM posts 
WHERE post_status = 'published' 
post_id DESC