SELECT count(DISTINCT product.id)
FROM `product`
JOIN `product_to_city` ON `product`.`publish` = 1
AND `product`.`archive` != 1 AND `product`.`delete` != 1
AND `product_to_city`.`product_id` = `product`.`id`
JOIN `city` AS `c` ON (`c`.`id` = 104 OR `c`.`parent_id` = 104)
AND `c`.`id` = `product_to_city`.`city_id`
JOIN `city` ON `city`.`id` = `product`.`city_id`
JOIN `company` ON `company`.`id` = `product`.`company_id`
SELECT *
FROM `items`
WHERE MATCH (`name`) AGAINST :searchString
OR `brand_id` IN (SELECT `id` FROM `brands` WHERE MATCH (`name`) AGAINST :searchString)
SELECT `t`.`ID`, `t1`.`VALUE`, `t2`.`VALUE`, ..., `tN`.`VALUE`, `t`.`TIME`
FROM (
SELECT DISTINCT `ID`, `TIME`
FROM `testtable`
) AS `t`
LEFT JOIN `testtable` AS `t1` ON `t1`.`NAME` = :name1
AND `t1`.`ID` = `t`.`ID` AND `t1`.`TIME` = `t`.`time`
LEFT JOIN `testtable` AS `t2` ON `t2`.`NAME` = :name2
AND `t2`.`ID` = `t`.`ID` AND `t2`.`TIME` = `t`.`time`
...
LEFT JOIN `testtable` AS `tN` ON `tN`.`NAME` = :nameN
AND `tN`.`ID` = `t`.`ID` AND `tN`.`TIME` = `t`.`time`
СREATE PROCEDURE curdemo()
BEGIN
DECLARE done INT DEFAULT FALSE;
DECLARE a CHAR(16);
DECLARE b INT;
DECLARE cur CURSOR FOR SELECT id, data FROM t1;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
OPEN cur;
read_loop: LOOP
FETCH cur INTO a, b;
IF done THEN
LEAVE read_loop;
END IF;
здесь выполняются нужные действия
END LOOP;
CLOSE cur;
END
SELECT `time`, GROUP_CONCAT(`worker`)
FROM `table`
GROUP BY `time`
SELECT `os`.`service_cost`
FROM `Org_services` AS `os`
JOIN `Organizations` AS `o` ON `o`.`ID` = `os`.`org_id` AND `o`.`org_name` = :orgName
JOIN `Services_list` AS `s` ON `s`.`ID` = `os`.`service_id` AND `s`.`service_name` = :servName