Вложенность SQL-запросов в PHP - PullRequest
0 голосов
/ 27 июля 2011

Вложенность SQL-запросов в PHP, кажется, немного беспокоит.Мне понадобился SQL-запрос для заполнения опций выбора в форме drupal, и я использовал следующий запрос.

SELECT data FROM webform_submitted_data WHERE nid = 1124 and cid = 4 and 
data not in (SELECT data FROM webform_submitted_data where nid = 1127 and cid = 11 group by data having COUNT(*) > 5)

Этот запрос прекрасно работает в phpMyAdmin, но когда я пробую его в коде PHP (приведенном ниже) с использованием db_query, он не работает (ничего не возвращается).

$array = array();
$sql = db_query("SELECT data FROM webform_submitted_data WHERE nid = 1124 and cid = 4 and data not in (SELECT data FROM webform_submitted_data where nid = 1127 and cid = 11 group by data having COUNT(*) > 5)");
while($row = db_fetch_object($sql)) {
$array[$row->data] = $row->data;
}
return $array;

Может ли кто-нибудь поправить меня, если что-то не так в моем запросе или коде?Кроме того, есть ли способ реализовать этот запрос в PHP?

Ответы [ 2 ]

1 голос
/ 27 июля 2011

Стоит ли указывать, что два запроса не совпадают?

В первом запросе от phpMyAdmin используется AND NOT EXISTS (...subquery...).

Во втором используется and data not in (... subquery ... ).

подразумевает другое поведение.

РЕДАКТИРОВАТЬ

В Drupal 6 поле data в webform_submitted_data является полем mediumtext.Использование его содержимого в качестве ключа массива не может быть хорошей идеей.Как насчет изменения вашего запроса следующим образом:

$array = array();
$sql = db_query("SELECT data FROM webform_submitted_data WHERE nid = 1124 and cid = 4    and data not in (SELECT data FROM webform_submitted_data where nid = 1127 and cid = 11   group by data having COUNT(*) > 5)");
while($row = db_fetch_object($sql)) {
    $array[] = $row->data;  // <<<<----- updated array push
}
return $array;

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

1 голос
/ 27 июля 2011

Заголовок, вы не используете тот же запрос! Поскольку вы даете нам знать, что первым запросом является тот, чей результат вы ищете, измените PHP на фактический запрос, который вы запустили в phpMyAdmin:

$sql = db_query("SELECT data FROM webform_submitted_data WHERE nid = 1124 and cid = 4 and not EXISTS (SELECT data FROM webform_submitted_data where nid = 1127 and cid = 11 group by data having COUNT(*) > 5)");

Обновление

Вы отметили, что оба запроса должны работать, но ни один не работает. Я предполагаю, что не выдается никакой ошибки, поскольку вы заявили, что

(ничего не возвращается)

Я не вижу причин, по которым этот запрос не работает. Убедитесь, что вы подключаетесь к той же базе данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...