我根据this问题设置了以下查询:
"(SELECT users_id, first_name, last_name, 'msg' as type FROM users
WHERE users_id LIKE '%" . $searchQuery ."%'
OR first_name LIKE '%" . $searchQuery ."%'
OR last_name LIKE '%" . $searchQuery ."%')
UNION
(SELECT title, vimeo_id, upload_date, 'topic' as type FROM video
WHERE title LIKE '%" . $searchQuery ."%'
OR vimeo_id LIKE '%" . $searchQuery ."%')"
执行查询后,它应该吐出如下结果:
foreach($row as $field) {
$details[] = array(
// Fields uit de users table
'user_id' => $field['users_id'],
'first_name' => $field['first_name'],
'last_name' => $field['last_name'],
//Fields uit de video table
'vimeo_id' => $field['vimeo_id'],
'video_title' => $field['title'],
'upload_date' => $field['upload_date']
);
}
它有效但我仍然遇到问题。当我使用应该在'user'表中的searchterm运行脚本时没有问题。当我使用应该在'video'表中的searchterm运行脚本时,我仍然得到结果,但它将结果移动到循环的第一部分。这意味着我得到以下输出:
[{"user_id":"Test","first_name":"151125560","last_name":"2016-01-08 10:49:32","vimeo_id":null,"video_title":null,"upload_date":null}]
视频ID应为151125560
,视频标题应为test
,upload_date应为2016-01-08
。
我尝试通过添加as type
来解决此问题,但我不知道如何从这里开始。有人可以通过将结果移到正确的领域来帮助我吗?
答案 0 :(得分:1)
您的UNION查询:
"(SELECT users_id, first_name, last_name, 'msg' as type FROM users
WHERE users_id LIKE '%" . $searchQuery ."%'
OR first_name LIKE '%" . $searchQuery ."%'
OR last_name LIKE '%" . $searchQuery ."%')
UNION
(SELECT title, vimeo_id, upload_date, 'topic' as type FROM video
WHERE title LIKE '%" . $searchQuery ."%'
OR vimeo_id LIKE '%" . $searchQuery ."%')"
将吐出四个字段(users_id
,first_name
以及last_name
和type
)。它不会吐出名为title
或vimeo_id
,upload
的字段,因为这些字段名称位于第二个查询中。
基本上在UNION中我们说两个select语句的结果集在字段方面是相同的。它始终使用第一个SELECT语句中指定的字段名称。
所以你应该这样做:
foreach($row as $field) {
$details[] = array(
// Fields uit de users table
'user_id' => $field['users_id'],
'first_name' => $field['first_name'],
'last_name' => $field['last_name'],
);
}
只是期望结果总是在那些领域(因为它们)。
相反,你可以这样做:
foreach($row as $field) {
if $field['type'] == 'topic'
{
$details[] = array(
// Fields uit de users table
'user_id' => $field['users_id'],
'first_name' => $field['first_name'],
'last_name' => $field['last_name'],
//Fields uit de video table
'vimeo_id' => '',
'video_title' => '',
'upload_date' => ''
);
} else {
$details[] = array(
// Fields uit de users table
'user_id' => '',
'first_name' => '',
'last_name' => '',
//Fields uit de video table
'vimeo_id' => $field['users_id'],
'video_title' => $field['first_name'],
'upload_date' => $field['last_name']
);
}
}
如果我的php语法关闭,请原谅我。已经一两年了,我生锈了。