Mysql 按多列查询,并在按一列查找结果时进行检查
我使用此查询按度假村、滑雪区或州名称选择网络摄像头。我想知道的是,什么时候只有度假的结果。一旦查询通过resort而不是skiarea或state找到记录,我是否可以标记该查询Mysql 按多列查询,并在按一列查找结果时进行检查,mysql,Mysql,我使用此查询按度假村、滑雪区或州名称选择网络摄像头。我想知道的是,什么时候只有度假的结果。一旦查询通过resort而不是skiarea或state找到记录,我是否可以标记该查询 SELECT SQL_CALC_FOUND_ROWS sv_cam.image, sv_cam.cam_id, sv_orte.resort,
SELECT SQL_CALC_FOUND_ROWS
sv_cam.image,
sv_cam.cam_id,
sv_orte.resort,
sv_canton.can_id,
sv_canton.canton,
sv_country.country
FROM sv_cam
LEFT JOIN sv_orte ON sv_cam.res_id = sv_orte.res_id AND status=0
LEFT JOIN sv_region ON sv_orte.reg_id = sv_region.reg_id
INNER JOIN sv_canton ON sv_orte.can_id = sv_canton.can_id
INNER JOIN sv_country ON sv_canton.cou_id = sv_country.cou_id
WHERE (resort='$region' OR ski='$region' OR canton='$region')
据我所知——你的问题的答案是否定的——不可能以任何方式“标记”整个查询结果 但是,可以根据匹配的条件标记每一行:
SELECT SQL_CALC_FOUND_ROWS
sv_cam.image,
sv_cam.cam_id,
sv_orte.resort,
sv_canton.can_id,
sv_canton.canton,
sv_country.country,
resort='$region' AS foundByResort,
ski='$region' AS foundBySki,
canton='$region' AS foundByCanton
FROM sv_cam
LEFT JOIN sv_orte ON sv_cam.res_id = sv_orte.res_id AND status=0
LEFT JOIN sv_region ON sv_orte.reg_id = sv_region.reg_id
INNER JOIN sv_canton ON sv_orte.can_id = sv_canton.can_id
INNER JOIN sv_country ON sv_canton.cou_id = sv_country.cou_id
WHERE (resort='$region' OR ski='$region' OR canton='$region')
这将向每行添加三列,每行中有1列与条件的一部分相匹配
然后,您可以在“不希望”的条件下检查所有行的零
或者您可以使用三个查询——每个查询对应一个条件——然后您将直接看到它,但是如果某些行匹配多个条件,则可能会得到重复的行
或者,您可以使用原始查询,然后运行第二个查询:
SELECT count(1) AS itemsFound
FROM sv_cam
LEFT JOIN sv_orte ON sv_cam.res_id = sv_orte.res_id AND status=0
LEFT JOIN sv_region ON sv_orte.reg_id = sv_region.reg_id
INNER JOIN sv_canton ON sv_orte.can_id = sv_canton.can_id
INNER JOIN sv_country ON sv_canton.cou_id = sv_country.cou_id
WHERE (ski='$region' OR canton='$region')
如果你得到零行,那么你就知道滑雪或坎顿没有结果。否则,您将得到一行一列包含匹配数。请编辑您的问题您希望我编辑什么Maku您试图实现什么,还不清楚