Не получается составить выборку в запросе в базе

Тема в разделе "Базы данных", создана пользователем zaffasoft, 24 фев 2011.

Модераторы: latteo
  1. zaffasoft

    zaffasoft Создатель

    Регистр.:
    2 янв 2007
    Сообщения:
    42
    Симпатии:
    7
    Имеется таблица
    tab_menu -> id | name | link
    tab_gallery -> id | catid | imgdate
    tab_gallery_catg -> cid | name
    где
    tab_gallery.id, будет подсчитывать общее количество в категории tab_gallery_catg.name в (totalf)
    tab_gallery.catid будет соответствовать с таким же catid в tab_gallery_catg.cid
    tab_gallery.imgdate будет брать данные и посчитывать количество за сегодня (totald)
    tab_menu.id начиная с id 26 до 38 привязать по названию tab_gallery_catg.name (в tab_gallery_catg.id разные начиная с id 1)
    tab_menu.name будет выводить название категории.
    tab_menu.link будет выводить ссылку на категорию
    Помогите составить запрос, чтобы выводился в таком формате, а также сортировался по возрастанию totalf
    id name link totalf totald
    26 Архитектура index.php?id=1 9 3
    27 Портрет index.php?id=1 3 5
    Я пытался сделать таким образом
    PHP:
    (SELECT id AS idNAME AS NAMElink AS link
    FROM tab_menu
    WHERE id
    >=26 AND id<=38)
    дальше пытался через Union all, не получилось.
     
  2. pslava

    pslava

    Регистр.:
    16 май 2007
    Сообщения:
    618
    Симпатии:
    122
    Опиши пожалуйста какие значения должны быть в полях totalf и totald
     
  3. dronich

    dronich Создатель

    Регистр.:
    7 июл 2010
    Сообщения:
    16
    Симпатии:
    4
    Описано немного коряво, но если правильно пноял то
    SELECT m.ID, m.Name, m.link, COUNT(cg.cID) AS totalf, COUNT(g.ID) AS totald
    FROM tab_menu m, tab_gallery g, tab_gallery_catg cg WHERE
    m.id=g.id AND g.catID=cg.cID AND m.ID BETWEEN 26 AND 38 AND g.imgdate = CURDATE()
    GROUP BY m.ID, m.Name, m.link
    ORDER BY totalf
     
  4. zaffasoft

    zaffasoft Создатель

    Регистр.:
    2 янв 2007
    Сообщения:
    42
    Симпатии:
    7
    @dronich: Пытался попробовать через твой составленный запрос. Вроде запрос прошел на ура, но почему то, результат пустой.:(

    @pslava: totalf-общее количество фоток в данной категории
    totald-общее количество фоток за сегодня в данной категории.
     
  5. pslava

    pslava

    Регистр.:
    16 май 2007
    Сообщения:
    618
    Симпатии:
    122
    SELECT id AS id, NAME AS NAME, link AS link,
    (SELECT COUNT(tab_gallery.id) FROM tab_gallery, tab_gallery_catg WHERE tab_gallery_catg.name=tm.name AND tab_gallery.catid=tab_gallery_catg.cid) AS totalf,
    (SELECT COUNT(tab_gallery.id) FROM tab_gallery, tab_gallery_catg
    WHERE tab_gallery_catg.name=tm.name
    AND tab_gallery.catid=tab_gallery_catg.cid
    AND tab_gallery.imgdate>CURDATE()) AS totald
    FROM tab_menu tm
    WHERE tm.id>=26 AND tm.id<=38
     
    zaffasoft нравится это.