Нужна помощь в написании запроса к базе

Тема в разделе "PHP", создана пользователем Alexsej, 26 мар 2010.

Статус темы:
Закрыта.
Модераторы: latteo
  1. Alexsej

    Alexsej Создатель

    Регистр.:
    15 авг 2008
    Сообщения:
    21
    Симпатии:
    0
    есть запрос к базе, в котором есть выбор значений, используя критерии, записанные заранее в массиве $where, причем размер его постоянно меняется... к примеру '77','80','16','34'. В общем, это вывод списка объектов в так называемом 'Избранном', сформированном с помощью записи параметров объекта в cookies.
    Пытаюсь как то организовать цикл,для подстановки элементов массива... но работает пока только в таком виде... четким заданием:ah:
    <php>
    $sql = "SELECT p.*, a.id AS agentid, a.name AS agent, a.user AS user, c.name AS company, c.id AS companyid, t.name AS type, p.type AS typeid "
    . "\n FROM (#__hp_properties AS p, #__hp_companies AS c)"
    . "\n LEFT JOIN #__hp_agents AS a ON p.agent = a.id"
    . "\n LEFT JOIN #__hp_prop_types AS t ON p.type = t.id"
    . "\n LEFT JOIN #__hp_featured AS f ON f.property = p.id"
    . "\n WHERE p.published='1' AND p.approved='1' AND t.published='1' "
    . "\n AND a.company=c.id"
    . "\n AND (publish_up = '0000-00-00 00:00:00' OR publish_up <= NOW())"
    . "\n AND (publish_down = '0000-00-00 00:00:00' OR publish_down >= NOW())"
    . "\n AND (p.id=$where[0] OR p.id=$where[1] OR p.id=$where[2] ) "
    . (($which == "featured") ? "\nAND p.featured='1'" : "")
    . "\nORDER BY ".(($which == "featured") ? "f.ordering ASC" : "p.".$sort." ".$order)
    . "\nLIMIT ".$limitstart.", ".$limit;
    $database->setQuery( $sql );
    $properties = $database->loadObjectList();
    </php>
     
  2. picasik

    picasik Постоялец

    Регистр.:
    13 ноя 2006
    Сообщения:
    81
    Симпатии:
    21
    если правильно понял попробуй так
    . "\n AND p.id in (".join(",",$where).")"
     
  3. GrizliK

    GrizliK Создатель

    Регистр.:
    4 сен 2009
    Сообщения:
    47
    Симпатии:
    3
    PHP:
    <php>
    $subquery="";
    foreach(
    $where as $v){
        
    $subquery .= " OR p.id=$v";
    }
    $subquery substr($subquery4);
    $sql "SELECT p.*, a.id AS agentid, a.name AS agent, a.user AS user, c.name AS company, c.id AS companyid, t.name AS type, p.type AS typeid "
    "\n FROM (#__hp_properties AS p, #__hp_companies AS c)"
    "\n LEFT JOIN #__hp_agents AS a ON p.agent = a.id"
    "\n LEFT JOIN #__hp_prop_types AS t ON p.type = t.id"
    "\n LEFT JOIN #__hp_featured AS f ON f.property = p.id"
    "\n WHERE p.published='1' AND p.approved='1' AND t.published='1' "
    "\n AND a.company=c.id"
    "\n AND (publish_up = '0000-00-00 00:00:00' OR publish_up <= NOW())"
    "\n AND (publish_down = '0000-00-00 00:00:00' OR publish_down >= NOW())"
    "\n AND ($subquery) "
    . (($which == "featured") ? "\nAND p.featured='1'" "")    
    "\nORDER BY ".(($which == "featured") ? "f.ordering ASC" "p.".$sort." ".$order)
    "\nLIMIT ".$limitstart.", ".$limit;
    $database->setQuery$sql );
    $properties $database->loadObjectList();
    </
    php>
     
Статус темы:
Закрыта.