목차
回复讨论(解决方案)
백엔드 개발 PHP 튜토리얼 问一个联合查询的语句

问一个联合查询的语句

Jun 23, 2016 pm 02:19 PM



如上图所示数据表
怎么读出A中的数据呢?(同时也要读出B中对应的数据)


回复讨论(解决方案)

select * from `a` ,`b`  where  `a`.`bid` like concat('%',`b`.`bid`,'%')

如果要查a表id等于1对应的关联数据,可以写成
select * from `a` ,`b`  where `a`.`id`='1' and `a`.`bid` like concat('%',`b`.`bid`,'%')

是要查a表,结果应该类似这样:

Object{  [id] => 1  [bid] => Object  {     [1] => Object     {        id => 1        content => 'BBBBB'     }     [2] => Object     {        id => 5        content => 'BBBBB'     }     [3] => Object     {        id => 2        content => 'BBBBB'     }  }  conent => 'AAAAA'}
로그인 후 복사

类似的php伪代码应该是:

foreach ($tablea->result as $a){	echo $a->id	foreach ($a->bid as $b)	{		echo $b.id;		echo $b.content;	}	echo $a.conent}
로그인 후 복사


打印结果是:

id bid(& b.content) content
------------------------------------
1 1, BBBBBBB AAAAAAAA
1 5, BBBBBBB AAAAAAAA
1 2, BBBBBBB AAAAAAAA
2 2, BBBBBBB AAAAAAAA
2 4, BBBBBBB AAAAAAAA

你要做成这种结果,用程序很容易实现的,上面的SQL其实一定上现实了你的功能

select * from `a` ,`b` where `a`.`bid` like concat('%',`b`.`bid`,'%')

如果要查a表id等于1对应的关联数据,可以写成
select * from `a` ,`b` where `a`.`id`='1' and `a`.`bid` like concat('%',`b`.`bid`,'%')

这是是不是先读b表中的id,然后再模糊查询a表中的bid?

select * from `a` ,`b`  where  `a`.`bid` like concat('%',`b`.`bid`,'%')
로그인 후 복사

恩,先关联AB表,然后模糊查询a表中的bid是不是在a表的bid中

这样会根据b表的id递增的顺序排序
而不是原先a表中bid逗号字符串的顺序:1,5,2??应该是1-5-2的顺序

建议贴出以下语句以便人家测试
create table ....;

insert into table.... ; 语句

select a.id, b.id as bid, a.content, b.content as bcontent from A表 a, B表 b where find_in_set(b.id, a.bid) order by a.id
로그인 후 복사
로그인 후 복사

select a.id, b.id as bid, a.content, b.content as bcontent from A表 a, B表 b where find_in_set(b.id, a.bid) order by a.id
로그인 후 복사
로그인 후 복사


谢谢版主!
find_in_set(b.id, a.bid)好像只能查询到第一条,比如上面的数据表中a.bid是1,5,2,结果只显示b.id=1的那一条!b.id=5, b.id=2的那几条都没查询出来!

你在表B加个冗余字段A_id多好。

CREATE TEMPORARY TABLE a (id int, bid varchar(10), content varchar(10));INSERT INTO a VALUES('1','1,5,2','AAAAAAA');INSERT INTO a VALUES('2','2,4','AAAAAAA');INSERT INTO a VALUES('3','1,3,2','AAAAAAA');CREATE TEMPORARY TABLE b (bid int, content varchar(10));INSERT INTO b VALUES('1','BBBBB');INSERT INTO b VALUES('2','BBBBB');INSERT INTO b VALUES('3','BBBBB');INSERT INTO b VALUES('4','BBBBB');INSERT INTO b VALUES('5','BBBBB');select a.id, b.bid as bid, a.content, b.content as bcontent from a, b where find_in_set(b.bid, a.bid) order by a.id
로그인 후 복사

原来是我的“1, 5, 2”逗号后面有空格!就没法全查询出来了!空格去掉就ok了

另外,这个find_in_set的查询结果没法按照1-5-2的原始顺序排列!只能按1-2-5递增或5-2-1递减的次序排列啊?

唠叨老大用了另一种更有效率的写法,不过我那些其实也可以得出一样的结果的!
select * from `a` ,`b`  where  `a`.`bid` like concat('%',`b`.`bid`,'%') order by id

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

뜨거운 기사 태그

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

11 최고의 PHP URL 쇼트너 스크립트 (무료 및 프리미엄) 11 최고의 PHP URL 쇼트너 스크립트 (무료 및 프리미엄) Mar 03, 2025 am 10:49 AM

11 최고의 PHP URL 쇼트너 스크립트 (무료 및 프리미엄)

Instagram API 소개 Instagram API 소개 Mar 02, 2025 am 09:32 AM

Instagram API 소개

Laravel의 플래시 세션 데이터로 작업합니다 Laravel의 플래시 세션 데이터로 작업합니다 Mar 12, 2025 pm 05:08 PM

Laravel의 플래시 세션 데이터로 작업합니다

Laravel Back End : Part 2, React가있는 React 앱 구축 Laravel Back End : Part 2, React가있는 React 앱 구축 Mar 04, 2025 am 09:33 AM

Laravel Back End : Part 2, React가있는 React 앱 구축

Laravel 테스트에서 단순화 된 HTTP 응답 조롱 Laravel 테스트에서 단순화 된 HTTP 응답 조롱 Mar 12, 2025 pm 05:09 PM

Laravel 테스트에서 단순화 된 HTTP 응답 조롱

PHP의 컬 : REST API에서 PHP Curl Extension 사용 방법 PHP의 컬 : REST API에서 PHP Curl Extension 사용 방법 Mar 14, 2025 am 11:42 AM

PHP의 컬 : REST API에서 PHP Curl Extension 사용 방법

Codecanyon에서 12 개의 최고의 PHP 채팅 스크립트 Codecanyon에서 12 개의 최고의 PHP 채팅 스크립트 Mar 13, 2025 pm 12:08 PM

Codecanyon에서 12 개의 최고의 PHP 채팅 스크립트

라 라벨에서 알림 라 라벨에서 알림 Mar 04, 2025 am 09:22 AM

라 라벨에서 알림

See all articles