2016-07-06 84 views
1

我想提出一个搜索页面,我试图利用工会三个表选择计数,但我得到的错误是这样 Fatal error: Cannot pass parameter 2 by reference in /home/plooks/public_html/user/test.php on line 106here is my table structure与工会表的SQL查询SELECT COUNT

表1名>>博文

| bid | title  | body   | author | 
|----- |------- |------------- |-------- | 
| 1  | new  | hello new  | you  | 
| 2  | cast  | broadcast  | me  | 
| 3  | hack  | who hack us | you  | 

表2名>> forumnew

| fid | ftitle | fbody   | user | 

|----- |------- |------------- |-------- | 
| 1  | new forum | hello new  | you  | 
| 2  | cast me | broadcast  | me  | 
| 3  | hack you | who hack him | us  | 

表3名>>下载

| did | file  | disc   | type  | 

|----- |------- |------------- |-------- | 
| 1  | whoweare | hello new  | php  | 
| 2  | cast  | broadcast  | html  | 
| 3  | hack  | who hack us | c++  | 

SQL查询

SELECT COUNT(id) FROM (
    SELECT 'post' AS type, BID AS id FROM blogpost 
    UNION 
    SELECT 'jail' AS type, jid AS id FROM forumnew 
    UNION 
    SELECT 'article' AS type, TID AS id FROM download 
)csl WHERE title LIKE :search OR title LIKE :search") 
+0

哪个表有description列? – artm

+0

@artm我编辑了我的帖子 – Frank

+0

你的代码是什么样的?类似的问题:http://stackoverflow.com/questions/8287581/how-to-resolve-cannot-pass-parameter-by-reference-error-in-php#autocomment44785441 – mulquin

回答

1

有查询一个错误,你没有title在临时表csl,所以它不能用在WHERE条款中。另外第二个OR title LIKE :search是多余的。如果你不想做一个截然不同的这个id,那么你不需要其他的列,只有标题列才能过滤,结果将是一样的。

SELECT COUNT(*) FROM (
    SELECT title FROM blogpost 
    UNION 
    SELECT ftitle AS title FROM forumnew 
    UNION 
    SELECT disc AS title FROM download 
) csl WHERE title LIKE :search 

SELECT 
    (SELECT COUNT(*) FROM blogpost WHERE title LIKE :search) + 
    (SELECT COUNT(*) FROM forumnew WHERE ftitle LIKE :search) + 
    (SELECT COUNT(*) FROM download WHERE disc LIKE :search)