2016-08-17 3 views
0

모든 열 이름이 같은 6 개의 테이블이 있습니다. 이제 new = '1'인 테이블 만 선택하려고합니다. 예를 들어일부 열 이름이있는 둘 이상의 SQL 테이블 중에서 선택하십시오.

: 관리자가 자신의 서버에 새 동영상을 추가 할 때

Table 1: 3d_movie 
+----+------+-----+------+ 
| id | name | new | date | 
+----+------+-----+------+ 
| 1 |name1 | 0 | 10.00| 
| 2 |name1 | 0 | 10.00| 
| 3 |name2 | 1 | 10.00| 
+----+------+-----+------+ 

Table 2: english_movie 
+----+------+-----+------+ 
| id | name | new | date | 
+----+------+-----+------+ 
| 1 |name1 | 0 | 10.00| 
| 2 |name1 | 1 | 10.00| 
| 3 |name2 | 0 | 10.00| 
+----+------+-----+------+ 

Table 3: hindi_movie 
+----+------+-----+------+ 
| id | name | new | date | 
+----+------+-----+------+ 
| 1 |name1 | 1 | 10.00| 
| 2 |name1 | 0 | 10.00| 
| 3 |name2 | 0 | 10.00| 
+----+------+-----+------+ 

, 그가 선택한 새로운 = 클라이언트가 새 영화 페이지로 이동하면 그래서, 나는 모든 테이블 곳에서 모든 영화를 검색 할 (1) new = '1'.

나는 이러한 방법으로 시도했지만 당신은 UNION를 사용하여 SQL 쿼리를 프레임에가 ..

Tried 1: $result = mysqli_query($db,"SELECT * FROM 3d_movie,english_movie,hindi_movie WHERE 3d_movie.new='1' and english_movie.new='1' and hindi_movie.new='1 ORDER BY date DESC LIMIT 30"); 

Tried 2: $result = mysqli_query($db,"SELECT * FROM 3d_movie,english_movie,hindi_movie WHERE new='1' ORDER BY date DESC LIMIT 30"); 
+4

당신은'UNION'을 찾고 있습니다; 하지만 너무 늦지 않으면 나는 당신의 테이블 구조를 바꿀 것입니다. 이름이 같지만 이름이 같은 6 개의 테이블은 필요하지 않습니다. 대신 하나의 표를 만들고 하나 이상의 열을 추가하여 다른 표에있는 내용을 구별하십시오. 원시적 인 예 : "3d", "english", "hindi"와 같은 문자열을 저장하는 "type"문자열; 더 좋은 예는'movies-table '테이블이'many-to-many' 관계에서'movie_movie_types' 테이블을 통해 참조하는'movies' 테이블이 당신이 "힌디어"와 " 3d ". – Uueerdo

+0

첫 번째 테이블은 하나의 테이블에만 '새로운'레코드가 생기면 다른 레코드는 새로운 레코드가없고 아무것도 반환하지 않기 때문에 실패합니다. 왜냐하면'and'은 하나의 검사가 아니라 모든 검사에서 조건이 참이어야하기 때문입니다. 아마도 당신은 대신'또는'를 원할 것입니다. 그러나 그때조차도 테이블의 데카르트 제품 조인을하고 있으며 모든 종류의 결과를 얻을 수 있습니다. 'new'가 고유 한 식별자가 아니기 때문에 두 번째 것은 실패합니다. –

+0

또한 왜 십진수 값을 저장하는'date' 필드가 있습니까 ??? – Uueerdo

답변

1

를 좀 도와주세요 작동하지 않을 수 있습니다. easiet 방법입니다

SELECT * 
FROM 3D_MOVIE 
WHERE NEW = 1 

UNION 

SELECT * 
FROM ENGLISH_MOVIE 
WHERE NEW = 1 

UNION 

SELECT * 
FROM HINDI_MOVIE 
WHERE NEW = 1 
2

선택 그래서

SELECT * 
FROM 3d_movie 
WHERE new = 1 

UNION 

SELECT * 
FROM 3d_movie 
WHERE new = 1 

및 UNION

를 사용하지만, 미래에 당신은 테이블을 결합하고 하나 개의 컬럼이 할 추가 고려해야합니다 다음 쿼리를보십시오 영화 장르를 식별하십시오 :

Table 1: movie 
+----+------+-----+------+-------+ 
| id | name | new | date | genre | 
+----+------+-----+------+-------+ 
| 1 |name1 | 0 | 10.00| 3d | 
| 2 |name1 | 0 | 10.00| eng | 
| 3 |name2 | 1 | 10.00| hin | 
+----+------+-----+------+-------+ 
0

테이블 사이에서 SQL 쿼리를 실행하여 y 우리가 원하는 출력. 그러나 테이블 구조를 변경할 수 있다면 더 나은 해결책을 찾을 수 있습니다. 여러 테이블을 유지하는 대신 moview_type 또는 category과 같은 다른 열을 추가하고 모든 동영상 목록을 동일한 테이블에 넣을 수 있습니다. 그래서 테이블은 아래처럼 보일 것입니다 :

+----+------+-----+------+----------+ 
| id | name | new | date | category | 
+----+------+-----+------+----------+ 
| 1 |name1 | 0 | 10.00| 3d  | 
| 2 |name1 | 0 | 10.00| English | 
| 3 |name2 | 1 | 10.00| Hindi | 
+----+------+-----+------+----------+ 

새로운 형식의 영화를 가지고 있다면이 방법으로 새로운 테이블을 추가 할 필요가 없습니다.

관련 문제