[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Помогите сделать sql запрос
vedbmak
Проблема такая, у меня есть таблица.

lid line
1 97
2 98
3 99
4 100
5 101
6 102
7 103

Если я сделал запрос
$nodes = db_query("SELECT lid, line FROM `lines`"); 


Как теперь мне из $nodes вырвать только те значения line, которые соответствуют определенным lid?



Спустя 17 минут, 22 секунды (12.01.2011 - 18:56) inpost написал(а):
vedbmak
А пример?

Спустя 7 минут, 47 секунд (12.01.2011 - 19:04) vedbmak написал(а):
Я делаю модуль для друпала)))У меня есть функция...
 function clearline_form_table()    {

$nodes = db_query("SELECT lid, line FROM `lines`");

while ($node = db_fetch_object($nodes)) {
$options[$node->lid] = '';
$form['line' ][$node->lid] = array('#value' => $node->line);
}

$form['lid'] = array(
'#type' => 'checkboxes',
'#options' => isset($options) ? $options : array(),
);


$form['submit'] = array(
'#type' => 'submit',
'#value' => 'Очистить',
);


return $form;
}


Т.е. lid - чекбоксы.
Затем я пишу обработчик нажатия сабмита, например пытаюсь такой, но он выдает вместо значений намись Array((запутался

function clearline_form_table_submit($form, &$form_state)
{
$lids = array();

foreach ($form_state['values']['lid'] as $key) {
if ($key) {
$lids[] = $form['line'][$key];
}
}


drupal_set_message('Deleted nodes ' . implode(', ', $lids));

}

Спустя 7 часов, 24 минуты, 33 секунды (13.01.2011 - 02:28) gidrosoldat написал(а):
Не проще сразу сделать?

$nodes = db_query("SELECT lid, line FROM `lines` WHERE lid = line");

Спустя 7 часов, 12 минут, 7 секунд (13.01.2011 - 09:40) linker написал(а):
SELECT `line` FROM `lines` WHERE `lid` = 5
или
SELECT `line` FROM `lines` WHERE `lid` in (2, 4, 10)

Спустя 8 часов, 27 минут, 29 секунд (13.01.2011 - 18:08) vedbmak написал(а):
ммм пытался так сделать...
foreach ($form_state['values']['lid'] as $key)     {
if ($key) {
$lids = db_fetch_object(db_query("SELECT line FROM `lines` WHERE lid = $key"));
set_time_limit(20);
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
$result = socket_connect($socket, 'тут ип адрес', '23');

Вообще пишу модуль для работы с оборудованием cisco)))Дальше идет отправка логина и пароля. Но затем, идет отправка команды очистки линии
send_command($socket, "clear line $lids");
И тут все виснет, т.е. я думаю скорее всего не то что то подставляет, и отправляет неправильную команду. Если отправлять не $lids а именно название линии, то все нормально, все выполняется. send_command моя функция, он рабочая)

Спустя 11 минут, 39 секунд (13.01.2011 - 18:19) gidrosoldat написал(а):
Если line должен соответствовать lid'у, то почему в запросе lid к lid'у приравнивается ?
$form_state['values']['lid'] переборается как $key, а в запросе опять проверяется на соответствие lid. Может тут опечатка ?

Спустя 1 час, 11 минут, 23 секунды (13.01.2011 - 19:31) vedbmak написал(а):
потому что в $form_state['values']['lid'] содержатся отмеченые чекбоксом lidы. И мы в запросе прогоняем их на соответствие.
drupal_set_message('Deleted ' . implode(', ', (array)$lids));

Выдает Deleted "такая то линия", т.е. все правильно, но это работает только если поставить (array)$lids. Именно (array) помог, если это не ставить то выдает ошибку, вот я и думаю, что наверно косячу с типом. Тока вот мозгов не хватает чтоб додумать)))

Спустя 1 час, 12 минут, 43 секунды (13.01.2011 - 20:44) vedbmak написал(а):
тема закрыта, разобрался сделал
function clearline_form_table_submit($form, &$form_state)
{
$lids = array();

foreach ($form_state['values']['lid'] as $lid) {
if ($lid) {
$lids[] = drupal_render($form['line'][$lid]);
}
}


drupal_set_message('Deleted nodes ' . implode(', ', $lids));
}
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.