Задача, наверное, не сложная, но я не имею вообще никакого опыта в составлении запросов к БД.
Вот, "накрутил" такой:
$q = "SELECT name, id FROM `services`";
$result = mysql_query($q);
print "<table>\n";
while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) {
print "\t<tr>\n";
foreach ($line AS $col_value) {
print "\t\t<td>$col_value</td>\n";
}
print "\t</tr>\n";
}
print "</table>\n";
mysql_free_result($result);
mysql_close($link);
?>
Конечно, не сам, в подавляющей части, а "поиском" по drupal.ru.
Запрос надо изменить так, чтобы определялось какие name и id будут выводиться:
должны отображаться только те, название которых совпадает с названием страницы (ноды).
Пока отображаются, конечно, все.
Заголовок страницы (ноды) я понял как получить:
<?phpif ( arg(0) == 'node' && is_numeric(arg(1)) && ! arg(2) ) {
$node = node_load(arg(1));
$title = $node->title;
print "<h4>$title</h4>";?>
но не знаю как его дальше использовать: как ни пытался - запрос выдает пустой результат.
Комментарии
<?php $q = "SELECT name, id FROM `services` WHERE name='$title'"; ?>
почитайте, полезно: http://www.ageent.ru/sql-where/
<?php
if ( arg(0) == 'node' && is_numeric(arg(1)) && ! arg(2) ) {
$node = node_load(arg(1));
print '<h4>'. $node->title .'</h4>';
?>
А так?
огромное спасибо! все работает, как надо!
Еще один вопрос.
Насколько быстро этот запрос будет работать?
Например, если поиск будет идти по таблице, содержащей несколько десятков тысяч записей; будет ли сильно нагружать сервер вывод, скажем, 100 строк?
Для нормального поиска по высоконагруженным проектам есть SOLR.
http://drupal.org/project/apachesolr
Ваш код должен быть полностью переписан.
return;
$result = db_query("SELECT name, id FROM {services} WHERE name='%s'", $node->title);
$rows = array();
while($row = db_fetch_object($result)){
$rows[] = array($row->id, $row->name);
}
$header = array('Id', 'Name');
if(!count($rows)){
$rows[] = array(array('data' => 'No result', 'colspan' => count($header)));
}
print theme('table', $header, $rows, array(), $node->title);
Dan, расскажите пожалуйста, в чем преимущества использования menu_get_object() вместо node_load(arg(1)) . Я в Drupal6 продолжаю использовать node_load (как и в пятой версии).
Не лучше, не хуже. Используйте что удобнее. С menu_get_object писать меньше
Ясно, спасибо!
Класс! Спасибо, Dan!
Еще один вопрос возник: надо сделать "фильтр" по клику - записей много, может потребоваться увидеть только часть.
Вот, например:
1 - стол - рик - 5 рублей
2 - стол - мебельсити - 10 рублей
3 - стол - мебель - 20 рублей
хочется, чтобы "по клику" по одной из компаний на отдельно выделенной области, где будут перечислены все компании (рик, мебельсити, мебель), показывались только "кликнутые".
т.е. так: клик по "мебельсити":
2 - стол - мебельсити - 10 рублей.
P.S. сайт-то сам, конечно, не про мебель. просто, дабы не смущать мед. терминами - написал так. Идея, конечно, та же.
В процессе поиска решения нашел такой пример:
<?php
$dblocation = "localhost"; // Имя сервера
$dbuser = "root"; // Имя пользователя
$dbpswrd = ""; // Пароль
$dbname = "catalog"; // Имя базы данных
// Соединение с сервером базы данных
$dblink = mysql_connect( $dblocation, $dbuser, $dbpswrd );mysql_query( 'SET NAMES cp1251' );
// Выбираем базу данных
mysql_select_db( $dbname, $dblink ); // По умолчанию сортировка по наименованию, по возрастанию
$orderby = 'title';
$sort = 'ASC';
if ( isset( $_GET['orderby'] ) and isset( $_GET['sort'] ) ) {
if ( in_array( $_GET['orderby'], array( 'code', 'title', 'price' ) ) ) $orderby = $_GET['orderby'];
if ( in_array( $_GET['sort'], array( 'ASC', 'DESC' ) ) ) $sort = $_GET['sort'];
} $query = 'SELECT code, title, description, price
FROM products
ORDER BY '.$orderby.' '.$sort;
$res = mysql_query( $query );
echo '<h1>Каталог продукции</h1>'."\n";
// Выводим "шапку" таблицы
echo '<table border="1" cellpadding="4" cellspacing="0" style="border-collapse: collapse; empty-cells: show">'."\n";
echo '<tr>';
if ( $sort == 'ASC' ) {
$tmp = 'DESC';
$image = 'down.gif';
} else {
$tmp = 'ASC';
$image = 'up.gif';
}
if ( $orderby == 'code' )
echo '<th><a href="'.$_SERVER['PHP_SELF'].'?orderby=code&sort='.$tmp.'">Код</a> <img src="'.$image.'" alt="" /></th>';
else
echo '<th><a href="'.$_SERVER['PHP_SELF'].'?orderby=code&sort=ASC">Код</a></th>';
if ( $orderby == 'title' )
echo '<th><a href="'.$_SERVER['PHP_SELF'].'?orderby=title&sort='.$tmp.'">Наименование</a> <img src="'.$image.'" alt="" /></th>';
else
echo '<th><a href="'.$_SERVER['PHP_SELF'].'?orderby=title&sort=ASC">Наименование</a></th>';
echo '<th>Описание</th>';
if ( $orderby == 'price' )
echo '<th><a href="'.$_SERVER['PHP_SELF'].'?orderby=price&sort='.$tmp.'">Цена</a> <img src="'.$image.'" alt="" /></th>';
else
echo '<th><a href="'.$_SERVER['PHP_SELF'].'?orderby=price&sort=ASC">Цена</a></th>';
echo '</tr>'."\n";
while( $prd = mysql_fetch_array( $res ) ) {
echo '<tr>';
echo '<td>'.$prd['code'].'</td>'."\n";
echo '<td>'.$prd['title'].'</td>'."\n";
echo '<td>'.$prd['description'].'</td>'."\n";
echo '<td>'.$prd['price'].'</td>'."\n";
echo '</tr>'."\n";
}
echo '</table>'."\n";
?>
решил "встроить" его в тот, что был предложен Вами, Dan... но что-то криво пошло: отображается "белая страница"; хотя, до момента "клика по названию" я еще не дошел, но тормоз уже тут. Вроде, как тут (по умолчанию) должны выводиться все записи, а получается "пусто", т.е. отсутствие записей (сама страница отображается, но так, как будто данные просто отсутствуют):
<?php
print $body;
if(!($node = menu_get_object()))
return; $where = 'Firm = 0';
if(isset($_GET['where']){
if(in_array($_GET['where'], array(Firm)))
$where = $_GET['where'];
}
$result = db_query("SELECT CAT, Firm, NUM FROM MEBEL where Name='%s' ORDER BY Firm", $node->title); $res = mysql_query( $result );
echo
'<h1>Каталог продукции</h1>'."\n";// Выводим "шапку" таблицы
echo '<table border="1" cellpadding="4" cellspacing="0" style="border-collapse: collapse; empty-cells: show">'."\n";
echo '<tr>';
if ( $sort == 'ASC' ) {
$tmp = 'DESC';
} else {
$tmp = 'ASC';
}
if ( $where == 'Firm' )
echo '<th><a href="'.$_SERVER['PHP_SELF'].'?where=Firm='.$tmp.'">Код</a></th>';
else
echo '<th><a href="'.$_SERVER['PHP_SELF'].'?where=Firm=ASC">Код</a></th>';
echo '</tr>'."\n";
while( $prd = mysql_fetch_array( $res ) ) {
echo '<tr>';
echo '<td>'.$prd['CAT'].'</td>'."\n";
echo '<td>'.$prd['Firm'].'</td>'."\n";
echo '<td>'.$prd['NUM'].'</td>'."\n";
echo '</tr>'."\n";
}
echo '</table>'."\n";
?>
В общем, что-то неправильно сделал...
Пока у меня сохраняется такой вывод (предложенный Вами):
<?php
print $body;
if(!($node = menu_get_object()))
return;
$result = db_query("SELECT CAT, Firm, NUM FROM MEBEL where Name='%s' ORDER BY Firm", $node->title);
$rows = array();
while($row = db_fetch_object($result)){
$header = array('Название по прайсу', 'Мед. компания', 'Цена услуги');
$rows[] = array($row->CAT, $row->Firm, $row->NUM);
}
// $rows[] = array(array('data' => 'Нет данных', 'colspan' => count($header)));
// }
print theme('table', $header, $rows, array());
?>
Поставьте views и не мучайтесь
а views это легко решить? тогда займусь им. спасибо!)
Dan, огромное спасибо!