Extra Block Types (EBT) - New Layout Builder experience❗

Extra Block Types (EBT) - styled, customizable block types: Slideshows, Tabs, Cards, Accordions and many others. Built-in settings for background, DOM Box, javascript plugins. Experience the future of layout building today.

Demo EBT modules Download EBT modules

❗Extra Paragraph Types (EPT) - New Paragraphs experience

Extra Paragraph Types (EPT) - analogical paragraph based set of modules.

Demo EPT modules Download EPT modules

Scroll

Сложный запрос к БД

Сложный запрос к БД
, by

Добрый день подскажите как реализовать - в модуль передаются куча данных, и в зависимости от них выполняется вот такой код:

 

$query = db_select('add_web','n'); 

$query->fields('n', array('w_id'));

 

if($_GET['field_w_cena1_value_min'])

$query->condition('n.w_cena1', $_GET['field_w_cena1_value_min'], '>=');

 

--------  и так далее ---------

вот вопрос как в $query-> запилить сравнение по двум полям? Вообще допустим при наличие определенной переменной необходимо сравнить поля одной записи на равенство и не выбирать те записи, у которых значение полей одинаковы

 

Пытался писать что-то вроде  if($_GET['nolast']) $query->condition('n.w_et1', 'n.w_et2', '!='); но увы не работает (((

 

Подскажите пожалуйста как выполнить. Необходимо именно таким способом ((( 

-------------------------------------

В конце естественно:

$ids = $query->execute()->fetchCol();

 

 

1 answer
votes: 765
Answer

Во-первых используйте функцию check_plain() для того чтобы обрабатывать переменные $_GET, во-вторых подставляйте условия в запрос как заполнители:

https://drupalbook.org/ru/drupal/rabota-s-bd-v-drupal-7-urok-12-usloviya-zaprosov-where-having

 

Если вы реализуете поиск, то возможно лучше будет его делать через Facet API.

http://drupal.org/project/facetapi