ФорумРазработкаБазы данных → помогите с запросом

помогите с запросом

  • sc2r2bey

    Сообщения: 10 Репутация: N Группа: Кто попало

    Spritz 7 мая 2010 г. 4:48

    хочу сделать запрос из 8 таблиц, не получается
    $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

    где я ошибся?
  • NRG

    Сообщения: 4761 Репутация: N Группа: в ухо

    Spritz 7 мая 2010 г. 4:54, спустя 5 минут 19 секунд

    sc2r2bey, где ты ошибся?
  • sc2r2bey

    Сообщения: 10 Репутация: N Группа: Кто попало

    Spritz 7 мая 2010 г. 4:59, спустя 5 минут 39 секунд

    хз, знал бы исправил
    Спустя 224 сек.
    где-то в первом запросе накосячил
  • artoodetoo

    Сообщения: 5139 Репутация: N Группа: в ухо

    Spritz 7 мая 2010 г. 5:08, спустя 8 минут 30 секунд

    $posts = mysql_result($result,0);
    $total = intval(($posts - 1) / $num) + 1;

    ты кажется ожидаешь, что первый запрос вернет КОЛИЧЕСТВО записей? это не так
    Спустя 159 сек.
    видимо нужна select count(*)
    ιιlllιlllι унц-унц
  • sc2r2bey

    Сообщения: 10 Репутация: N Группа: Кто попало

    Spritz 7 мая 2010 г. 5:09, спустя 1 минуту 40 секунд

    всегда возвращал, но запросы были более простые, а как надо?
    Спустя 59 сек.
    да согласен, но тогда влазит ошибка
  • artoodetoo

    Сообщения: 5139 Репутация: N Группа: в ухо

    Spritz 7 мая 2010 г. 5:10, спустя 54 секунды

    count(*) в SQL
    или mysql_num_rows() в PHP, но лучше первое :)
    ιιlllιlllι унц-унц
  • sc2r2bey

    Сообщения: 10 Репутация: N Группа: Кто попало

    Spritz 7 мая 2010 г. 5:15, спустя 4 минуты 46 секунд

    даже не ошибка, тот же результат ничего не меняется

    "(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
    )
    "
    Спустя 211 сек.
    возвращает не то количество записей что должно быть
  • artoodetoo

    Сообщения: 5139 Репутация: N Группа: в ухо

    Spritz 7 мая 2010 г. 5:15, спустя 15 секунд

    дорогой sc2r2bey, к сожалению мой запас доброты на сегодня исчерпан. удачи!
    ιιlllιlllι унц-унц
  • artoodetoo

    Сообщения: 5139 Репутация: N Группа: в ухо

    Spritz 7 мая 2010 г. 5:28, спустя 12 минут 55 секунд

    ok. ты проверь что выдает твой запрос в myphpadmin. помоему тебе надо подучить sql и не за счет форума. книжки читай
    Спустя 94 сек.
    подсказка: тебе нужно получить ОДНО число
    ιιlllιlllι унц-унц
  • sc2r2bey

    Сообщения: 10 Репутация: N Группа: Кто попало

    Spritz 7 мая 2010 г. 5:37, спустя 8 минут 59 секунд

    согласен, что с sql у меня слабовато phpmyadmin выдает 0, подправь запрос :)
    Спустя 60 сек.
    из 2-х таблиц
  • sc2r2bey

    Сообщения: 10 Репутация: N Группа: Кто попало

    Spritz 7 мая 2010 г. 5:44, спустя 7 минут 6 секунд

    хотя можно вытянуть из каждой таблицы значение и их просуммировать?
  • sc2r2bey

    Сообщения: 10 Репутация: N Группа: Кто попало

    Spritz 7 мая 2010 г. 5:50, спустя 5 минут 48 секунд

    запрос выдает значение только первой таблицы
  • sc2r2bey

    Сообщения: 10 Репутация: N Группа: Кто попало

    Spritz 7 мая 2010 г. 6:04, спустя 14 минут 14 секунд

    COUNT(*)
    0
    33

    например так
  • artoodetoo

    Сообщения: 5139 Репутация: N Группа: в ухо

    Spritz 7 мая 2010 г. 6:18, спустя 13 минут 32 секунды

    ну и чего ты ждешь от меня (нас)? ты понимаешь как работает union?

    кстати, второй запрос ты тоже наивно пытаешься ограничить limit - он относится ко второму select а не к общему склеенному набору, но т.к. первый select у тебя как видим нихуя не возвращет, то пофигу :)

    учи матчасть, запускай почаще phpmyadmin и тестируй, тестируй, тестируй
    Спустя 263 сек.
    и, эта… ))) когда запрос копируешь в phpmyadmin, не забудь заменить чем-то $factory ))) неебу он у тебя вообще существует или нет.

    досвидания! надеюсь нескоро тебя увидим
    ιιlllιlllι унц-унц
  • sc2r2bey

    Сообщения: 10 Репутация: N Группа: Кто попало

    Spritz 7 мая 2010 г. 6:32, спустя 13 минут 46 секунд

    нет не знаю как работает оператор Union потому и обратился к вам за помощью!

    про $factory я знаю, а про идею с phpmyadmin спасибо!

Пожалуйста, авторизуйтесь, чтобы написать комментарий!