2009-10-28 3 views
0

where 절을 사용하는 쿼리가 있습니다. 때로는 이것이 사용될 수도 있고 다른 경우에는 모든 결과를 되돌리기 위해 완전히 생략 할 수도 있습니다. 확실히 두 개의 다른 쿼리를 작성할 수 있지만 단순한 이유로 모든 코드를 줄일 수 있습니다. mysql에서이 작업을 수행 할 수있는 방법이 있습니까?MySQL의 "where"구문에 와일드 카드를 사용하는 방법이 있습니까?

SELECT * FROM my_table WHERE id = '3' 

과 :

SELECT * FROM my_table 

상위 쿼리를 사용하여 여전히 다시 모든 기록을 얻을 수있는 방법이 있나요

같은 쿼리를 가지고?

+0

id <> 3 또는 id = 3; 여기서 id> 0; 여기서 id는 null이 아닙니다. – PostMan

+0

실제로 무엇을하려고하는지, 시나리오를 작성하면 사람들이 더 나은 솔루션을 도출 할 수 있습니다. –

+0

첫 번째 쿼리에서 이미 수행하고있는 작업인데 두 번째 쿼리가 필요한 이유는 무엇입니까? –

답변

1

더 많은 음식 ...

나는 당신이 '3'을 인용 확인할 수 있습니다. ID가 char 데이터이면 LIKE 문자열 비교 연산자를 사용할 수 있습니다. 하지만 당신에게 NULL의 ID로 모든 값을 제공하지 않습니다 모든 값

SELECT * FROM my_table WHERE id LIKE '%' 

를 들어 하나의 값

SELECT * FROM my_table WHERE id LIKE '3' 

를 들어

.

+0

최고! 그것은 위대한 작품. 감사. :) – Jim

+0

나는 절대 null id를 갖지 않을 것이다. – Jim

2

아니요. 첫 번째 쿼리의 조건자는 실제로 테이블에서 모든 레코드를 검색하지 않을 수 있습니다. 그것은 쿼리가 반환해야하는 특정 레코드를 가져와야 만 인덱스를 사용할 수 있습니다. 이 같은 형태의 술어를 유지하지만 여전히 모든 결과를 반환하고 싶었다면

, 당신은 같은 것을 할 필요가있을 것이다 :

where id = 3 or id <> 3 

나이 :

where id = id 

주 그 둘 중 하나를 선택하면 id이 null 일 수있는 경우 or id is null을 추가해야합니다.

where 1 

을하지만 이것은 단지 중복, 당신은뿐만 아니라 단지 술어를 생략 할 수 있습니다

당신은 당신의 쿼리의 조건을 가지고 싶다면

이 충분합니다. 내가 제대로 질문을 이해한다면

+0

제임스 답장을 보내 주셔서 감사합니다. – Jim

1

후 YES

SELECT * FROM my_table WHERE 1=1 
+0

감사 PAS. "id"id = ''를 어떻게 사용하고 싶습니까? 지금 시도했지만 1 행을 반환해야 할 때 아무 것도 반환하지 않습니다. – Jim

0

귀하의 질문은 의심이다. id==3이 없을 때 모든 항목을 반환해야한다는 것이 실제로 나와 있습니다.

$sql = mysql_query("SELECT * FROM my_table"); 
while($row = mysql_fetch_array($sql) { 
    if($row['id']==3) 
     // do something 
} 

을하지만 테이블이 성장함에 따라이 데이터베이스에 엄청난 스트레스를 넣어 것입니다 : 모든 항목을 끌어 다음 PHP를 사용하여 분류하면 당신은 쉽게 그렇게 할 수 있습니다. 여러 쿼리를 사용하고 두 번째 쿼리에서 일종의 제한을 적용해야합니다.

// try to get id == 3 
SELECT * FROM my_table 

// if id == 3 returns 0 results 
SELECT * FROM my_table LIMIT 5 

희망 하시겠습니까?

0

당신은

같은 동적 SQL을 사용해야 할 것 & 규정

그런 설정 예선에 "=의 '3'"거나 "WHERE ID MY_TABLE SELECT * FROM" "1".

+0

안녕 랜스. 이 경우 저장 프로 시저를 사용해야하는지 또는 일반 SQL 문을 사용할 수 있습니까? – Jim

+0

@Jim : MySQL의 동적 SQL에 대한 MySQL의 PreparedStatement를 살펴보고 싶습니다. http://dev.mysql.com/tech-resources/articles/4.1/prepared-statements.html –

+0

해당 링크를 이용해 주셔서 감사합니다. 나는 지금 볼 것이다. – Jim

1

당신이 함께 가서, 당신은 부정 할 그 마지막 순간에 을 결정하는대로 SQL 쿼리를 작성하는 경우/"WHERE"쿼리의 부분은 당신이 어디에 -에 OR 1를 추가 할 수 있습니다 무시 절.즉 논리적으로, X 또는 TRUE 내가 데모를 위해 너무 많은 결과를 얻을 수 없습니다 거기에 LIMIT 10을 고수했다 모든 X.

sqlite> SELECT id FROM moz_downloads WHERE id < 405 LIMIT 10; 
80 
403 
404 
sqlite> SELECT id FROM moz_downloads WHERE id < 405 OR 1 LIMIT 10; 
80 
403 
404 
405 
407 
408 
409 
410 
411 
412 

주에 대한 사실을 기억하지만 두 번째 문장의 경우 절입니다 id < 405 or 1.

응용 프로그램에 따라 다르지만 런타임에 쿼리를 생성 할 수도 생성하지 않을 수도 있습니다. 일부 검색어는 SELECT * FROM recent_files처럼 항상 동일하지만 일부 검색어는 실시간으로 생성되는 것과 비슷합니다. 후자의 경우, 당신은

something = make_safe_for_sql(get_something_from_user()) 
query = "SELECT * FROM data WHERE something=" + something 
if should_ignore_something: 
    query += " OR 1" 
database.execute(query) 

주 같은 것을있을 수 있습니다 : 당신의 SQL 엔진에 따라, 당신은 진정한 부울로 평가 OR 1=1을 할 필요가 있습니다. 생각에 대한

+0

안녕하세요. 이 쿼리는 이미 작성되었으며 "마지막 순간"에 작성되지 않습니다. 귀하의 질문에 대한 두 번째 질문에 "OR 1"이 누락되었습니다. 나는 내가 그것을 "동적으로"삽입 할 때 "OR 1"을 삽입하는 방법을 따르지 않을 것이다. 나는 이해가 되니? – Jim

+0

@Jim : 답변을 업데이트하겠습니다. –

+0

안녕하세요. Mark, 나는 이것을 시도했지만 적어도 오류는 없었습니다. 유효한 user_id를 넣어도 모든 행이 표시됩니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까? – Jim

관련 문제