嵌套的SELECT语句不起作用

时间:2018-11-20 作者:Darth Mikey D

我有两张表需要搜索。

第一个表名:人员字段:id、lname、fname、department、extension

第二个表格名称:部门字段:id,部门

第二个表具有完整的部门名称,而第一个表具有与该部门关联的id。当用户搜索时,它应该从第一个表中搜索lname、fname和extension,从第二个表中搜索department。我有以下sql代码来运行搜索。

$sql = $wpdb->get_results("SELECT * FROM " . $wpdb->prefix . 
"dir_personnel where lname like \'$search%\' or fname like \'$search%\' or 
extension like \'$search%\' or department=(SELECT id FROM " . $wpdb->prefix . 
"dir_departments where department like \'$search%\') order by lname");
但是,以下代码本身运行良好。

$sql = $wpdb->get_results("SELECT * FROM " . $wpdb->prefix . 
"dir_personnel where lname like \'$search%\' or fname like \'$search%\' or 
extension like \'$search%\' order by lname");
以及

$sql = $wpdb->get_results("SELECT id FROM " . $wpdb->prefix . 
"dir_departments where department like \'$search%\'");
我肯定我错过了一些简单的东西,但我们非常感谢您的帮助。

1 个回复
SO网友:Fencer04

您需要为每个具有相同名称的列标识表。您还应该为部门使用IN语句,而不是=语句。

我无法测试,因为我没有您的DB,但您可以尝试:

$sql = $wpdb->get_results("SELECT * FROM " . $wpdb->prefix . 
"dir_personnel as personnel where lname like \'$search%\' or fname like \'$search%\' or 
extension like \'$search%\' or personnel.department IN (SELECT id FROM " . $wpdb->prefix . 
"dir_departments as departments where departments.department like \'$search%\') order by lname");

结束

相关推荐

最小化对数据库的wp_Query调用

我有一个非常基本的问题,这个问题可以通过原始sql查询轻松完成,我们可以将想要输出的数据库列命名为 select id,name,date from tableA where id>\'100\' 但同样的事情Wp_Query 提供了大量与我们完全无关的垃圾数据。我们可以使用php 但问题是,它肯定会杀死数据库,因为它正在幕后进行大量调用。我们与var_dump 而且它是巨大的数据,99%对我们没有用处。我们只想列出id和name列,而不是像这样的列PING_STATUS,COM