我希望有人可以帮助我。
我有以下查询
SELECT * FROM网格LEFT OUTER JOIN grid_images ON g_img_grid_id = g_id&& ((g_img_main IS NOT NULL)||(g_img_main IS NULL&& g_img_width> = 475))WHERE g_blog_id IS NOT NULL group by g_id ORDER 通过g_id DESC
这不符合我的要求。我想要发生的是这个。在grid_images的左连接中,我想用g_img_main选择一个图像,如果有一个不为空的图像,如果它们为null,那么我希望它基于大于474的宽度选择一个图像。所以g_img_width> = 475。
有没有办法做到这一点?
进一步解释我有两张桌子。一个是“网格”,另一个是“grid_images”。因此每个网格可以包含无限的图像。网格具有id“g_id”,并且每个图像附加到“g_id”...因此在“grid_images”中,“g_img_grid_id”告诉我图像属于哪个网格。一些网格将在所有图像“g_img_main”中标记出主图像,而某些网格则不会。在左边jin我想选择标记为主“g_img_main”的图像(如果有的话),如果没有,我只想选择任何大于某个宽度“g_img_width”的图像。
== Table structure for table grids
|------
|Column|Type|Null|Default
|------
|//**g_id**//|int(11)|No|
|**g_permalink**|varchar(255)|No|
|g_type|tinyint(3)|No|3
|g_function|tinyint(3)|No|1
|g_format|tinyint(3)|No|1
|g_category|int(5)|No|
|g_name|varchar(255)|No|
|g_company_name|varchar(255)|Yes|NULL
|g_owner_id|int(11)|No|
|g_settings|text|No|
|g_about|text|No|
|g_website|varchar(2083)|No|
|g_donate_link|varchar(2083)|Yes|NULL
|g_donate_paypal|text|Yes|NULL
|g_image|varchar(255)|Yes|NULL
|g_view_permission|tinyint(1)|No|1
|g_post_permission|tinyint(1)|No|1
|g_allow_voting|tinyint(1)|Yes|NULL
|g_show_share|tinyint(4)|Yes|NULL
|g_site_grid|tinyint(1)|Yes|0
|g_date_created|int(11)|No|
|g_votes_per_user|int(11)|Yes|NULL
|g_votes_require_email|tinyint(1)|Yes|NULL
|g_facebook_eligible|tinyint(1)|Yes|NULL
|g_facebook_active|tinyint(1)|Yes|NULL
|g_facebook_app_tab_id|varchar(100)|Yes|NULL
|g_facebook_page_id|varchar(100)|Yes|NULL
|g_facebook_page_name|varchar(255)|Yes|NULL
|g_facebook_page_category|varchar(100)|Yes|NULL
|g_facebook_page_link|text|No|
|g_facebook_page_about|text|No|
|g_votes_rank_display|tinyint(1)|Yes|NULL
|g_lock_center|tinyint(1)|Yes|NULL
|g_passthe_item|varchar(255)|Yes|NULL
|g_facebook_img|varchar(255)|Yes|NULL
|g_pinterest_img|varchar(255)|Yes|NULL
|g_montage_img|varchar(255)|Yes|NULL
|g_views|int(11)|No|0
|g_blog_id|int(11)|Yes|NULL
== Dumping data for table grids
|------
|g_id|g_permalink|g_type|g_function|g_format|g_category|g_name|g_company_name|g_owner_id|g_settings|g_about|g_website|g_donate_link|g_donate_paypal|g_image|g_view_permission|g_post_permission|g_allow_voting|g_show_share|g_site_grid|g_date_created|g_votes_per_user|g_votes_require_email|g_facebook_eligible|g_facebook_active|g_facebook_app_tab_id|g_facebook_page_id|g_facebook_page_name|g_facebook_page_category|g_facebook_page_link|g_facebook_page_about|g_votes_rank_display|g_lock_center|g_passthe_item|g_facebook_img|g_pinterest_img|g_montage_img|g_views|g_blog_id
|------
|333|33-plus-ugliest-christmas-sweaters|1|1|4|0|33+ Ugliest Christmas Sweaters|NULL|11|null|<p><span style="line-height: 22.3999996185303px;">Just when you thought you've seen the ugliest Christmas sweaters around these people took ugly to the next level. Please feel free to share your comments, cuz some of these really need commenting...</span><br></p>| | |NULL| |1|2|NULL|1|1|1416865122|NULL|NULL|NULL|NULL|NULL|NULL|NULL|NULL| | |NULL|NULL|NULL|2014/11/26/14170476241649711529-4x3.jpg|2014/11/26/14170476241649711529pin-2x6.jpg|2014/11/26/14170476241649711529.jpg|0|20
== Table structure for table grid_images
|------
|Column|Type|Null|Default
|------
|//**g_img_id**//|int(11)|No|
|g_img_mem_id|int(11)|Yes|1
|g_img_dir|varchar(50)|No|
|g_img_file|varchar(100)|No|
|g_img_caption|text|Yes|NULL
|g_img_link|varchar(2083)|No|
|g_img_grid_id|int(11)|No|1
|g_img_date_added|int(11)|No|
|g_img_uploader_ip|int(11)|No|
|g_img_lat|decimal(18,12)|Yes|NULL
|g_img_lng|decimal(18,12)|Yes|NULL
|g_img_width|int(6)|Yes|NULL
|g_img_height|int(6)|Yes|NULL
|g_img_reported|tinyint(1)|Yes|NULL
|g_img_reported_access_code|varchar(100)|Yes|NULL
|g_img_last_edit|int(11)|Yes|NULL
|g_img_flickr_id|varchar(255)|No|
|g_img_facebook_id|varchar(255)|No|
|g_img_original_id|int(11)|Yes|NULL
|g_img_reposted_from|int(11)|Yes|NULL
|g_img_first_name|varchar(100)|Yes|NULL
|g_img_email|varchar(255)|Yes|NULL
|g_img_hearts|int(11)|No|0
|g_img_views|int(11)|No|0
|g_img_main|tinyint(1)|Yes|NULL
== Dumping data for table grid_images
|------
|g_img_id|g_img_mem_id|g_img_dir|g_img_file|g_img_caption|g_img_link|g_img_grid_id|g_img_date_added|g_img_uploader_ip|g_img_lat|g_img_lng|g_img_width|g_img_height|g_img_reported|g_img_reported_access_code|g_img_last_edit|g_img_flickr_id|g_img_facebook_id|g_img_original_id|g_img_reposted_from|g_img_first_name|g_img_email|g_img_hearts|g_img_views|g_img_main
|------
|15918|11|2014/11/22/|13793150131416692879.jpg| | |333|1416692879|849259821|NULL|NULL|453|768|NULL|NULL|NULL| | |NULL|NULL|NULL|NULL|0|0|NULL
|15919|11|2014/11/22/|4655589171416692816.jpg| | |333|1416692816|849259821|NULL|NULL|613|768|NULL|NULL|NULL| | |NULL|NULL|NULL|NULL|0|0|NULL
|15920|11|2014/11/22/|463211921416692661.jpg| | |333|1416692661|849259821|NULL|NULL|495|475|NULL|NULL|NULL| | |NULL|NULL|NULL|NULL|0|0|NULL
答案 0 :(得分:0)
您可以将条件放在查询的WHERE
部分吗?
SELECT
*
FROM grids
LEFT OUTER JOIN grid_images
ON g_img_grid_id = g_id
WHERE g_blog_id IS NOT NULL
AND (g_img_main IS NOT NULL OR (g_img_main IS NULL AND g_img_width >= 475))
GROUP BY g_id
ORDER BY g_id DESC
答案 1 :(得分:0)
以下是查询尝试的内容:获取所有存在主映像的ID,然后将其与没有主记录的记录联合起来。这应该给你一个每个网格的记录......
-- Get the records with a master image. Assumes there is only one master per grid
SELECT g.g_id, i.g_img_id -- or whatever columns you need
FROM
grids g
INNER JOIN
grid_images i on i.gm_img_grid_id = g.g_id
WHERE i.g_img_main IS NOT NULL AND g.g_blog_id IS NOT NULL
UNION
-- now get the the other records.
SELECT g.g_id,min(i.g_img_id) as g_img_id -- columns must match those in the first select
FROM grids g
INNER JOIN
grid_images i on i.gm_img_grid_id = g.g_id
WHERE i.g_img_main IS NULL
AND g.g_blog_id IS NOT NULL
AND i.g_img_width >=475
GROUP BY g.g_id -- need to group by to get only one record per id