簡體   English   中英

如何在 PHP 中使用多個搜索條件查找相關庫存?

[英]how find related inventory using multiple searching criteria in PHP?


有什么辦法可以使用 php+mysql 進行多條件搜索?
我在一個網站上看到它,我想為自己制作類似的東西。

所以我有兩張桌子
表 1-“書籍”(標題、作者、BookID)
表2-“描述”(Bookid,描述)

每本書都可以有用戶想要的盡可能多的描述。

表“書籍”
書名 作者 BookID
噩夢 (...) 湯姆 B. AAA
很棒的 (…) Jim C. AAB
鬼夜 (…) Amy D. AAC
保姆 (...) Kitty D. AAD
你好世界 (...) Pete P. AAE
漢尼拔 (...) 黃油 H. AAF



表“說明”
圖書 ID 描述 相關性
AAA 驚悚 0
AAA 犯罪 0
AAA 偵探 0
AAB 地理 0
AAB 旅行 0
AAC 驚悚 0
AAD 喜劇 0
AAD 家庭 0
AAE 編程 0
AAE 計算機科學 0
AAF 驚悚 0
AAF 犯罪 0

我已經制作了插入數據部分,實際上對我來說並不難,但是當涉及到搜索部分時,事情變得比我想象的要復雜得多。

我將使用的工作表與我的“目標”網站使用的模型完全相同,這里我使用 () 表示 html 的選擇表單,並使用 [] 表示普通輸入表單

[ ]
(AND/OR) [ ]
(AND/OR) [ ]
(AND/OR) [ ]

用戶可以填寫 1-4 個條件,例如“驚悚”(AND)“犯罪”,MySQL 會找到符合這些描述的所有描述,在我的情況下,將是這些信息:

AAA 驚悚 0
AAA 犯罪 0
AAC 驚悚 0
AAF 驚悚 0
AAF 犯罪 0

下一步,計算機應該對找到的 ID 進行分類並將結果分類為:

AAA 2 標准驗證
AAF 2 標准已驗證
AAC 1 標准驗證

之后,我希望它將這些信息回顯/打印到瀏覽器上:

1. 噩夢 (…) Tom B. AAA
描述:驚悚,犯罪

2. 漢尼拔 (…) Butter H. AAF
描述:驚悚,犯罪

3. 鬼夜 (…) Amy D. AAC
描述:驚悚


我的主要問題是分類和排序部分,我不知道如何在SQL中將代碼插入到另一個代碼中。
我嘗試過 GROUP BY(第一次),但沒有成功。
事實上,經過幾天的失敗嘗試,我開始思考我的數據結構是否是真正的問題......


感謝您的幫助和關注。

使用 group by 是一個好主意,但您可能希望添加分類計數以幫助您進行排序。

例如:

架構 (MySQL v5.7)

CREATE TABLE book (
  `title` VARCHAR(10),
  `id` VARCHAR(3) PRIMARY KEY
);

INSERT INTO book
  (`title`, `id`)
VALUES
  ('Nightmare', 'AAA'),
  ('Wonderful.', 'AAB'),
  ('GhostNight', 'AAC'),
  ('Babysitter', 'AAD'),
  ('Helloworld', 'AAE'),
  ('Hannibal', 'AAF');

CREATE TABLE cat (
  `BookID` VARCHAR(3),
  `Description` VARCHAR(50),
  `Relevance` VARCHAR(7),
  FOREIGN KEY (`BookID`) REFERENCES book (id)
);

INSERT INTO cat
  (`BookID`, `Description`, `Relevance`)
VALUES
  ('AAA', 'Thriller', '0'),
  ('AAA', 'Crime', '0'),
  ('AAA', 'Detective', '0'),
  ('AAB', 'Geography', '0'),
  ('AAB', 'Travel', '0'),
  ('AAC', 'Thriller', '0'),
  ('AAD', 'Comedy', '0'),
  ('AAD', 'Family', '0'),
  ('AAE', 'Programming', '0'),
  ('AAE', 'Computer Science', '0'),
  ('AAF', 'Thriller', '0'),
  ('AAF', 'Crime', '0');

查詢#1

SELECT b.title, COUNT(c.description) AS cnt
FROM book b
LEFT JOIN cat c
ON b.id = c.BookID
WHERE c.Description IN ('Thriller', 'Crime')
GROUP BY b.title
ORDER BY cnt DESC;

輸出

| title      | cnt |
| ---------- | --- |
| Nightmare  | 2   |
| Hannibal   | 2   |
| GhostNight | 1   |

在 DB Fiddle 上查看

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM