2017-09-25 5 views
0

나는이 정보 형식 두 테이블을 호출하는 쿼리가 있습니다.mysql 쿼리 두 테이블에서 두 행

친구 목록에 사용자 이름이 표시되면 사용자 이름과 아바타를 받고 싶습니다. 아바타 행은 avatar입니다. 나는 이것으로 시도한다.

DB::get("SELECT friends. * , (SELECT `login`, `*avatar*` FROM `users` WHERE `users`.`id` = friends.`user_id`) AS `login` FROM `friends` WHERE `id_user`='" . $this->user['id'] . "' ORDER BY `id` DESC LIMIT ") 

그리고 나에게 오류 실수가

SQLSTATE[21000]: Cardinality violation: 1241 Operand should contain 1 column(s) 

을 제공?

+0

[** SQLSTATE \ [21000 \] 중복 가능성이있는 카디널리티 위반 : 1241 피연산자에 1 열이 포함되어야합니다. SQL 쿼리 **] (https://stackoverflow.com/questions/38326246/sqlstate21000-cardinality-violation-1241-operand-should-contain-1-columns)를 사용하면 하나 이상의 열을 반환 할 수없고 대신에'join '하십시오. – Nope

+0

여러 열을 선택하고 하나의 열 이름에 할당하려고하면 결코 작동하지 않으므로 그럴 수 있습니다. 이해가 안되기 때문에 생각하면됩니다 ... 그리고 mysql 엔진은 그것에 대해 생각하고 이것에 대한 예외를 추가했습니다. 그 오류를 throw합니다. 이제 JOIN의 사용법을 제안하는 답변을 볼 수있을 때 어떻게 극복 할 수 있습니까? JOIN을 직접 사용해보고 문제가 있는지 알려주세요. –

+0

@AbhikChakraborty 본보기로 도와주세요. – Martinovska

답변

2

먼저 Prepared Statement를 사용해야하고 둘째, 당신은 대신 두 개의 열

SELECT friends. * , (SELECT `login`, `*avatar*` FROM .. 

을 가지고 인라인 뷰를 쓸 수 없습니다 JOIN을 사용해야하며, 이는 현재 접근 방식보다 효율적이며 더 읽기 쉽습니다.

+0

@sagi 동의합니다. 제 생각에는 말씨가 잘못되었습니다. – Ravi

+0

LEFT JOIN? ? – Martinovska

+0

@Martinovska 그게 달려 있습니다. '왼쪽 결합 '은 왼쪽 테이블에서 공통과 데이터를 반환합니다. 내 생각에, 당신의 경우에, 당신은'INNER JOIN'을 사용해야합니다. – Ravi

2

당신은 JOIN를 사용해야합니다, 예를 들면 :

모든
SELECT f.*, u.* 
FROM friends f JOIN users u ON f.user_id = u.id 
WHERE f.id_user = <your_id> 
ORDER BY id DESC LIMIT <your_limit>;