[英]SQL Query : Alter columny value if columnx value is greater, less or equal
[英]MySQL - LEFT JOIN value of columnX where MAX(columnY)
所以這是我的查詢:
SELECT SQL_CALC_FOUND_ROWS wagons.id,
wagons.mid,
wagons.year,
wagons.make,
wagons.model,
wagons.nickname,
wagons.description,
members.first,
members.last,
wagon_photos.filename,
Count(DISTINCT( likes.id )) AS likes,
Count(DISTINCT( comments.id )) AS comments
FROM wagons
INNER JOIN members
ON members.mid = wagons.mid
LEFT JOIN wagon_photos
ON wagon_photos.wid = wagons.id
LEFT JOIN likes
ON likes.wid = wagons.id
LEFT JOIN comments
ON comments.wid = wagons.id
GROUP BY wagons.id
ORDER BY wagons.id DESC
LIMIT 10
我正在嘗試獲取wagon_photos.filename
,其中wagon_photos.default
是最大值。 (這是一個布爾值,其中只有一行(對於每個wagon_photos.wid
)將為1。)如果沒有選擇,則該成員沒有選擇默認照片,我希望它返回最低的wagon_photos.id
。
我已經使用ORDER BY和GROUP BY嘗試了許多查詢,但是我認為這可能會更復雜一些。 如果我使用WHERE子句,它會忽略所有未鏈接有照片的旅行車,這是我不想做的。
CREATE TABLE `wagons` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`mid` int(8) DEFAULT NULL,
`year` varchar(4) DEFAULT NULL,
`make` varchar(50) DEFAULT NULL,
`model` varchar(100) DEFAULT NULL,
`nickname` varchar(200) DEFAULT NULL,
`description` mediumtext,
`featured` int(1) DEFAULT '0',
`visibility` int(1) DEFAULT '1',
`commision` int(1) DEFAULT '1',
`feat1title` varchar(50) DEFAULT NULL,
`feat2title` varchar(50) DEFAULT NULL,
`feat3title` varchar(50) DEFAULT NULL,
`feat4title` varchar(50) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=617 DEFAULT CHARSET=utf8;
CREATE TABLE `wagon_photos` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`wid` int(11) DEFAULT NULL,
`filename` varchar(255) DEFAULT NULL,
`caption` varchar(255) DEFAULT '',
`default` int(1) DEFAULT '0',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=41 DEFAULT CHARSET=utf8;
讓我嘗試了解您的要求。 我認為您要問的是“如何構造查詢以選擇所有具有特定列的最大值的項目”。 如果是這樣,您想將其分解為更簡單的單元以解決它。 首先,您將需要最大值本身:
select max(wp.default) as max_val from wagon_photos wp
這可以為您帶來最大價值。
接下來,您可以創建查詢以選擇條件為真的行,但暫時忽略該條件:
select (your rows) from wagons w where (a condition will go here)
您的條件是希望wagon_photos.default等於最大值。 因此,您需要加入該表:
select (your rows) from wagons w join wagon_photos wp
on wp.wid = w.id where wp.default = (something)
您的“東西”恰好是我們在開始時為其創建查詢的max_value。 因此,將它們放在一起,將使用如下所示的子查詢:
select (your rows) from wagons w join wagon_photos wp
on wp.wid = w.id where wp.default = (
select max(wpb.default) from wagon_photos wpb
)
我自己沒有設置表來運行該表,因此我可能對括號感到厭煩,並且其中不包括所有聯接。 但是我認為這應該為您指明正確的方向。
好吧,我現在覺得有點傻。
我終於想到在AND wagon_photos.default = 1
的LEFT JOIN之后添加AND wagon_photos.default = 1
,並且可以正常工作。 我只需要確保他們始終使用默認設置即可,所以我運行了一個腳本,該腳本在每次更新照片時都會檢查默認設置,如果未設置默認默認設置,則將最新上傳設置為默認設置。
... LEFT JOIN wagon_photos ON wagon_photos.wid = wagons.id AND wagon_photos.default = 1 ...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.