【发布时间】:2017-03-06 05:23:09
【问题描述】:
我有一个 HTML 表单,我可以在其中找到作者在 URL 地址中的一本书。
网址是这样的:http://mywebsite.com/books/?author=john+smith 它会检索我的书。
我的 SQL 如下所示:
SELECT
doc_documents.id doc_id,
doc_documents.projection_isbd doc_isbd
FROM
doc_documents
LEFT JOIN doc_document_authors ON doc_document_authors.document_id = doc_documents.id
LEFT JOIN usr_users ON usr_users.id = doc_document_authors.user_id
WHERE
doc_documents.status = 'CONFIRMED' AND
db_type = 'PDB' AND
deleted = 'f' AND
usr_users.title ilike $1
ORDER BY
doc_documents.publish_date desc
$1 参数来自 PHP 脚本,我从 URL GET 参数中提取。
问题是我在哪里尝试查找 url 中有两个(或多个)作者的书籍,i。 e.:
http://mywebsite.com/books/?author=john+smith&author2=william+lother
我这样尝试了我的 sql:
SELECT
doc_documents.id doc_id,
doc_documents.projection_isbd doc_isbd
FROM
doc_documents
LEFT JOIN doc_document_authors ON doc_document_authors.document_id = doc_documents.id
LEFT JOIN usr_users ON usr_users.id = doc_document_authors.user_id
WHERE
doc_documents.status = 'CONFIRMED' AND
db_type = 'PDB' AND
deleted = 'f' AND
(usr_users.title ilike $1 AND
usr_users.title ilike $2)
ORDER BY
doc_documents.publish_date desc
但它不会工作。 可以帮我写个sql吗?
【问题讨论】:
-
它不起作用:是的,因为您希望单个用户的名称(标题)与 2 个(或更多)模式匹配;这不会发生(除非模式彼此有些相似)。您真正需要的是加入您的表(
doc_document_authors和usr_users)与查询中的作者过滤器一样多次,然后搜索WHERE usr_users1.title ilike $1 AND usr_users2.title ilike $2 AND ... -
试过这个,但它确实有效,我通过这个 SQL 完成了这个:[SELECT * FROM elaba.doc_documents LEFT JOIN elaba.doc_document_authors ON doc_document_authors.document_id = doc_documents.id LEFT JOIN elaba.usr_users as auth1 ON auth1.id = doc_document_authors.user_id LEFT JOIN elaba.usr_users as auth2 ON auth2.id = doc_document_authors.user_id LEFT JOIN elaba.usr_users as auth3 ON auth3.id = doc_document_authors.user_id WHERE doc_documents.status = 'CONFIRMED' AND db_type = ' PDB' AND deleted = 'f' AND (auth1.title ilike 'Jhon Smith' and auth2.title ilike 'John Doe')]
-
您还需要多次加入
doc_document_authors(您的查询仍然是针对同一作者的过滤器,但现在已多次加入)。 -
谢谢,这个很有魅力,这正是我需要的
标签: php postgresql