我有一個顯示項目列表的頁面。與每個項目被顯示從mysqli的數據庫中檢索到的以下數據:SELECT,SELECT COUNT和交叉引用表只能由一個查詢處理嗎?
- 標題
- 字幕
- 說明
- 零件數目(×1)
- 的與該相關聯的照片總數項目
- 從項目中隨機選擇的照片
- 標籤列表
項目使用的是分頁系統
由於這是基於我的一個老項目顯示每頁6個,它最初是草率的代碼完成(我也是剛學,不知道任何更好)使用許多查詢。實際上,其中的三項僅用於5-7項,並且這些項目都包含在與分頁系統一起工作的while循環中。我現在很清楚,這甚至不是做生意的正確方法。
我所熟悉的INNER JOIN和使用子查詢,但我很擔心,我未必能得到所有僅使用一個基於以下原因選擇查詢這些數據:
項目1-4是一個基本的
SELECT
查詢很容易,但是...第5項需要
SELECT COUNT
AND ...項目6需要一個基本
SELECT
查詢與ORDER by RAND LIMIT 1
到 選擇一個隨機照片出所有與每個項目 相關的那些(使用FilesystemIterator是不可能的,因爲照片 表具有指示0,如果相片是不活動的和1如果它是 活性列)第7項是由交叉引用表選擇
鑑於標籤和 項目,包含標籤標識和名稱的表,我不能肯定,如果這一切都可以(R偶數應就此而言)只需要一個查詢就可以完成,或者如果它需要m而不是一個查詢。我已經反覆閱讀了如何用報紙在鼻子上劃一個或多個查詢來在一個while循環中嵌套。我甚至讀過多個查詢,一般來說,這是一個壞主意。
所以我卡住了。我意識到這可能聽起來太籠統了,但我沒有任何可行的代碼,只是使用4個查詢來完成這項工作的舊代碼,其中3個嵌套在while循環中。
數據庫結構如下。
項目表:
+-------------+---------+----------+---------------+------+
| project_id | title | subtitle | description | part |
|---------------------------------------------------------|
| 1 | Chevy | Engine | Modify | 1 |
| 2 | Ford | Trans | Rebuild | 1 |
| 3 | Mopar | Diff | Swap | 1 |
+-------------+---------+----------+---------------+------+
照片表:
+----------+------------+--------+
| photo_id | project_id | active |
|--------------------------------|
| 1 | 1 | 1 |
| 2 | 1 | 1 |
| 3 | 1 | 1 |
| 4 | 2 | 1 |
| 5 | 2 | 1 |
| 6 | 2 | 1 |
| 7 | 3 | 1 |
| 8 | 3 | 1 |
| 9 | 3 | 1 |
+----------+------------+--------+
標籤表:
+--------+------------------+
| tag_id | tag |
|---------------------------|
| 1 | classic |
| 2 | new car |
| 3 | truck |
| 4 | performance |
| 5 | easy |
| 6 | difficult |
| 7 | hard |
| 8 | oem |
| 9 | aftermarket |
+--------+------------------+
標籤/項目交叉引用表:
+------------+-----------+
| project_id | tag_id |
|------------------------|
| 1 | 1 |
| 1 | 3 |
| 1 | 4 |
| 2 | 2 |
| 2 | 5 |
| 3 | 6 |
| 3 | 9 |
+------------+-----------+
我並不是要求爲我寫代碼,但如果我問的是有道理的話,我會誠懇地感謝一個正確的方向。很多時候,我在網上苦於PHP和MySQLi手冊,所以如果有什麼辦法可以打破這種情況,那就太好了。
非常感謝大家。
我認爲這可以用一個查詢和一個聯合的子查詢來完成。一個查詢可以得到1-5和7。讓我在回答之前先嚐試 – newGuy