хочу сделать запрос из 8 таблиц, не получается PHP: $num = 6; $page = $_GET['page']; $result = mysql_query("(SELECT photo.id_factory, photo.id AS id_photo, photo.url AS url_photo, factory.id AS id_factory, factory.name AS name_factory, factory.url AS url_factory FROM `photo` LEFT JOIN `factory` ON photo.id_factory=factory.id LEFT JOIN `type` ON photo.id_type=type.id LEFT JOIN `style` ON photo.id_style=style.id WHERE photo.id_factory='$factory' AND photo.published=1 AND type.published=1 AND style.published=1 AND factory.published=1 ) UNION ALL (SELECT other_photo.id_factory, other_photo.id AS id_photo, other_photo.url AS url_photo, factory.id AS id_factory, factory.name AS name_factory, factory.url AS url_factory FROM `other_photo` LEFT JOIN `factory` ON other_photo.id_factory=factory.id LEFT JOIN `other` ON other_photo.id_other=other.id WHERE other_photo.id_factory='$factory' AND other_photo.published=1 AND factory.published=1 AND other.published=1 )"); $posts = mysql_result($result,0); echo $posts; $total = intval(($posts - 1) / $num) + 1; $page = intval($page); if(empty($page) or $page < 0) $page = 1; if($page > $total) $page = $total; $start = $page * $num - $num; $sql = "(SELECT photo.id_factory, photo.id AS id_photo, photo.url AS url_photo, factory.id AS id_factory, factory.name AS name_factory, factory.url AS url_factory FROM `photo` LEFT JOIN `factory` ON photo.id_factory=factory.id LEFT JOIN `type` ON photo.id_type=type.id LEFT JOIN `style` ON photo.id_style=style.id WHERE photo.id_factory='$factory' AND photo.published=1 AND type.published=1 AND style.published=1 AND factory.published=1 ) UNION ALL (SELECT other_photo.id_factory, other_photo.id AS id_photo, other_photo.url AS url_photo, factory.id AS id_factory, factory.name AS name_factory, factory.url AS url_factory FROM `other_photo` LEFT JOIN `factory` ON other_photo.id_factory=factory.id LEFT JOIN `other` ON other_photo.id_other=other.id WHERE other_photo.id_factory='$factory' AND other_photo.published=1 AND factory.published=1 AND other.published=1 ) LIMIT $start, $num "; $photo = mysql_query($sql); самое забавное он выдает количество полей равное id_factory, а не реальное существующее в 2-х таблицах соответственно 1-й запрос однозначно не правильно составлен $posts = mysql_result($result,0); выдает значение равное id_factory где я ошибся?
подправил первый запрос [sql]" (SELECT COUNT(*) FROM `photo` LEFT JOIN `factory` ON photo.id_factory=factory.id LEFT JOIN `type` ON photo.id_type=type.id LEFT JOIN `style` ON photo.id_style=style.id WHERE photo.id_factory='$factory' AND photo.published=1 AND type.published=1 AND style.published=1 AND factory.published=1) UNION ALL (SELECT COUNT(*) FROM `other_photo` LEFT JOIN `factory` ON other_photo.id_factory=factory.id LEFT JOIN `other` ON other_photo.id_other=other.id WHERE other_photo.id_factory='$factory' AND other_photo.published=1 AND factory.published=1 AND other.published=1) "[/sql] все равно неправильное количество строк выдает
Больше или меньше ожидаемого? И почему Вы думаете что количество строк неверно? UPD:Что в теории выбирает Ваш запрос и что в теории возвращает mysql_result?
потому что проверял он выводит значение строк первой таблицы согласно условию, а надо возвращал сумму строк в обоих талицах согласно условию [sql](SELECT COUNT(*) FROM `photo` LEFT JOIN `factory` ON photo.id_factory=factory.id LEFT JOIN `type` ON photo.id_type=type.id LEFT JOIN `style` ON photo.id_style=style.id WHERE photo.id_factory='$factory' AND photo.published=1 AND type.published=1 AND style.published=1 AND factory.published=1) UNION ALL (SELECT COUNT(*) FROM `other_photo` LEFT JOIN `factory` ON other_photo.id_factory=factory.id LEFT JOIN `other` ON other_photo.id_other=other.id WHERE other_photo.id_factory='$factory' AND other_photo.published=1 AND factory.published=1 AND other.published=1)[/sql]
Не-а. Он выбирает количество строк, которое вернул первый запрос и количество строк, которое вернул второй запрос. А mysql_result($result,0); выбирает первое из этих двух значений. На вскидку могу назвать 4 способа это сделать: 1)Вынести count за за оба запроса. Запросы, соответственно, должны возвращать все строки поиска. 2)Заменить union на join 3)Складывать скриптом. 4)Вернуться к начальному запросу и использовать mysql_num_rows. И вообще есть подозрение что в данном случае можно посылать один запрос, а не два похожих, отличных лимитом.
а как вынести COUNT? может я неправильно UNION использую? я вот так сделал $posts = mysql_result($result,0)+mysql_result($result,1); так можно?
[sql]select count(*) from( select ... union all select ... ) [/sql] Смотря какую цель Вы преследуете используя union. Что значит "можно"? Я не проверяющая инстанция. Я не могу определить "можно" или "нельзя". Оно работает? Работает как надо? Значит это решение. Это решение Вас устраивает? Значит пока его можно использовать. Вообще, попробуйте погуглить, может найдете решение, которое Вам больше понравиться. Может увидите недочеты этого решения.