Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP/MySQL-查询的多个选择_Php_Mysql - Fatal编程技术网

PHP/MySQL-查询的多个选择

PHP/MySQL-查询的多个选择,php,mysql,Php,Mysql,我正在编写一个简单的音乐家数据库,它有一个搜索功能,当人们在数据库中搜索特定乐器时,可以通过电子邮件向他们发送音乐家的详细信息。我有演奏一种以上乐器的人,所以我有5张桌子,乐器,乐器2,乐器3,乐器4,乐器5 我的电子邮件函数上有一个MYSQL查询,但我无法让它搜索多个表 代码如下: $query = "SELECT * FROM instruments WHERE (instrument, instrument2, instrument3, instrument4, instrument5)

我正在编写一个简单的音乐家数据库,它有一个搜索功能,当人们在数据库中搜索特定乐器时,可以通过电子邮件向他们发送音乐家的详细信息。我有演奏一种以上乐器的人,所以我有5张桌子,乐器,乐器2,乐器3,乐器4,乐器5

我的电子邮件函数上有一个MYSQL查询,但我无法让它搜索多个表

代码如下:

$query = "SELECT * FROM instruments WHERE (instrument, instrument2, instrument3, instrument4, instrument5) = '$search'";
我的语法是愚蠢的还是走错了方向

非常感谢

你应该有一个带有仪表和电子邮件字段的表。看来这就是你想要的。

你试过:

SELECT * 
FROM instruments 
WHERE '$search' IN (instrument, instrument2, instrument3, instrument4, instrument5)
??我想这就是你想要的

但真正的解决方案是使用这些工具创建一个单独的表,而不是为相同的信息保留多个列

你应该有一张有音乐家的桌子和一张有乐器的桌子来放一般乐器和他们的信息。第三个用于解决乐器和音乐家之间的多对多关系,只保留音乐家id和乐器id

以下是一些有用的链接:


最好使用两张桌子——音乐家和乐器。Instruments表中的每一行都有一个字段“Musitor_id”,它表示相应的音乐家。这称为1-N关系

现在,如果要查询数据库,请执行以下操作:

SELECT * FROM musicians m LEFT JOIN instruments i ON (m.id = i.musician_id) WHERE i.name = "Oboe";
这将两个表连接在一起,为每个人演奏的乐器返回一行

或者,如果您已经知道音乐家ID,请仅查询乐器:

SELECT * FROM instruments WHERE musician_id = 123;

是的,需要重新考虑你的数据库。我也这么想我想没有办法挽救我的设计,因为除了代码的这一部分,它确实可以工作!我已经有两个表,人和仪器通过唯一ID链接,我只需要在仪器表中创建多个仪器好的,那么第一个查询应该完成我为示例编辑的工作。从我的问题来看,你有5个表。这听起来是积极的,我已经通过唯一ID在乐器和音乐家之间建立了联系,乐器本身在一个枚举数据类型的长列表中,我如何为它们生成ID?另外-感谢你提供了上述代码,现在看来它已经做到了,这只是一个简单的数据库,我将在稍后处理数据库规范化,因为显然这似乎是一种更有效的方法。@托比,当没有明显的ID时,你可以使用自动增量。是的,我已经在这两个数据库上使用了自动增量,这就是乐器与音乐家的链接方式