2012-06-13 2 views
1

나는 php와 mysql을 이용한 고급 검색 기능을 개발 중이다.여러 테이블 검색 Mysql

테이블은 다음과 같습니다 사용자가 키워드를 텍스트 필드에서 검색 할 수 , 그 결과는 한 번만 고유해야합니다 :

blogPost[id, title, description] 

water[id, title, description,] 

waterSpecie[id, waterId, specieId] 

specie[id, name] 

user[id, username] 

은 내가 수행하고자하는 것은 이것이다. 예 :

사용자가 대구를 검색 한 후 거기에 대구가있는 모든 blogposts와 대구도가있는 모든 수역 및 사용자가 닉 대구가 표시된 모든 blogposts를 표시하고 싶습니다. 그러나 blogPost에 제목과 설명에 대구가 있다고 가정하면 결과 목록에 두 번 나타나기를 원하지 않습니다.

그러나 blogPost 테이블에 제목에 대구가 있다고 말하면 그 내용 만 보여주고 싶을뿐입니다.

나는이 SQL 쿼리로 관리 할 수 ​​있었다 : 이제는 해당 쿼리에 blogPost 테이블을 추가하고 검색 할 수있게하려고한다. 그래서 하나의 테이블에 대구가 있다면 그 테이블의 결과 만 보여주고 싶습니다.

SELECT DISTINCT W.lat, W.lng, W.municipalityId, W.title, W.description 
FROM water AS W, specie AS S, waterSpecie AS WS 
WHERE S.name LIKE '%$term%' AND W.id = WS.waterId AND S.id = WS.specieId 
OR W.title LIKE '%$term%' AND W.id = WS.waterId AND S.id = WS.specieId; 

나는 내 문제를 설명 할 수 있었으면 좋겠다. 나는이 문제에 대한 도움을 얻을 수 있기를 바란다.

답변

0

MySQL 쿼리를 단순화하고 PHP 코드로 결과를 결합하면 최상의 결과를 얻을 수 있습니다. 귀하의 경우이 주된 이유는 검색 용어 및/또는 바닷물 및 검색 용어가있는 다른 것들이있는 경우 블로그 항목에 다른 결과를 결합하고자하는 것입니다.

$foundposts = findblogposts($searchterm); 
$foundusers = findusers($searchterm); 
$foundwaters = findwaters($searchterm); 
// etc 

if($foundposts){ 
    print($foundposts); 
} 
if($founduers){ 
    print($foundusers); 
} 
if($foundwaters){ 
    print($foundwaters); 
} 
// etc 

그런 식으로, 당신은 당신은 아마 보여 주어야 다른 형식의 요구 사항을 처리 할 수 ​​있습니다 의사 코드에서

는,이 같은 (물론, 실제 코드에서 DAO를 사용)를 할 거라고 등

1

제대로 블로그 게시물 올바르게, 사용자, 당신이 시도 할 수 있습니다 :

Select distinct tablename,id from 
(select 'blogpost', as tablename, id, title as searchfield from blogpost 
union 
select 'blogpost' as tablename, id, description as searchfield from blogpost 
union 
select 'water' as tablename, id, description as searchfield from water 
union 
select 'specie' as tablename, id, name as searchfield from specie 
union 
select 'user' as tablename, id, username as searchfield from user) searcher 
where searcher.searchfield='cod' 

내가 정확히 waterSpecie에 무슨 일이 일어나고 있는지하지 않는, 그래서 그것을 남겨 두었다.

당신은 같은 결과 뭔가 얻어야한다 :

tablename id 
blogpost  5 
user  12 

을 그리고 다음 ID = 5와 블로그 게시물에서 레코드를 얻을 수있는 데이터베이스를 조회 할 수 있으며, 식 (12)와 사용자의 기록.

PHP에서 프로그래밍 방식으로이 작업을 수행 할 수 있습니다. 검색 기능에 추가 할 테이블을 추가하는 경우 조인을 만들고 WHERE 절에 다른 부분을 추가하는 대신 아래 쿼리에서 UNION을 추가하면됩니다.

아마존 닷컴 크기로 확장 할 수 있을지 모르겠으므로, 나보다 더 잘 상담하십시오.

관련 문제