Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Вебмастеру (http://forum.oszone.net/forumdisplay.php?f=22)
-   -   Сайт на php + MySQL (http://forum.oszone.net/showthread.php?t=31421)

tradeukraine 08-12-2003 20:45 215211

Счас использую такой код
Код:

$config['host'] = 'localhost';
 *$config['user'] = 'root';
 *$config['pass'] = '';
 *$config['db'] = 'tradeuk';

 *$start = '  Приветствуем, Вас уважаемые посетители!<br>';

 *$t = '
 * <table border="0" width="480" class=man>
 * *<tr>
 * * <td width="480" height="20" class=menu>
 * * <font color="#FFFFFF">►</font> %a</td>
 * *</tr>
 * *<tr>
 * * <td width="480" class="men">
 * * %n <a href="%s">перейти</a></td>
</tr>
 * </table>
 *';

 *echo $start;

 *mysql_connect($config['host'], $config['user'], $config['pass']) or die('Неверный хост');
 *mysql_select_db($config['db']) or die('Сайт не доступен, нет связи с базой данных');

 *$max = mysql_fetch_array(mysql_query('SELECT MAX(id) FROM news_index'));
 *$max = $max['MAX(id)']+1;

 *while($result = mysql_fetch_array(mysql_query('SELECT * FROM news_index WHERE id<' . $max . ' ORDER BY id DESC;')))
{
echo str_replace(Array('%a', '%n', '%s'), Array($result['name'], $result['message'], $result['subject']), $t);
$max = $result['id'];
}

он вполне устраивает, и хорошо работает,
как можно ограничить вывод скажем до 10 сообщений? или точней id

[s]Исправлено: tradeukraine, 19:52 8-12-2003[/s]

vadimiron 08-12-2003 23:14 215212

Просто в запрос mysql_query после всех данных дописываешь
limit x,y , где x,y числа
x-с какого элемента начинать выводить записи
y-сколько записей выводить

то есть если нужно вывести 10 записей с первого, удовлетворяющего условию where или like, нужно написать
limit 0,10

tradeukraine 09-12-2003 13:00 215213

vadimiron
Пробовал - менять что то не пошло,
или ошибка или показывает все записи,
как можно поменять в этом коде?

tradeukraine 09-12-2003 20:07 215214

немогу понять, как вывисти скажем 1 и 8 запись?

tradeukraine 11-12-2003 20:29 215215

Народ!
Поможить,
Очень нужно!!!

Prisoner 12-12-2003 03:11 215216

Цитата:

SELECT [STRAIGHT_JOIN]
      [SQL_SMALL_RESULT] [SQL_BIG_RESULT] [SQL_BUFFER_RESULT]
      [SQL_CACHE | SQL_NO_CACHE] [SQL_CALC_FOUND_ROWS] [HIGH_PRIORITY]
      [DISTINCT | DISTINCTROW | ALL]
   select_expression,...
   [INTO {OUTFILE | DUMPFILE} 'file_name' export_options]
   [FROM table_references
     [WHERE where_definition]
     [GROUP BY {unsigned_integer | col_name | formula} [ASC | DESC], ...
     [HAVING where_definition]
     [ORDER BY {unsigned_integer | col_name | formula} [ASC | DESC] ,...]
     [LIMIT [offset,] rows]
     [PROCEDURE procedure_name]
     [FOR UPDATE | LOCK IN SHARE MODE]]
А вот по самой феньке LIMIT:
Цитата:

The LIMIT clause can be used to constrain the number of rows returned by the SELECT statement. LIMIT takes one or two numeric arguments. The arguments must be integer constants. If two arguments are given, the first specifies the offset of the first row to return, the second specifies the maximum number of rows to return. The offset of the initial row is 0 (not 1):
mysql> SELECT * FROM table LIMIT 5,10;  # Retrieve rows 6-15

To retrieve all rows from a certain offset upto the end of the result set, you can use -1 for the second parameter:
mysql> SELECT * FROM table LIMIT 95,-1; # Retrieve rows 96-last.

If one argument is given, it indicates the maximum number of rows to return:
mysql> SELECT * FROM table LIMIT 5;     # Retrieve first 5 rows
Надеюсь разберетесь.

tradeukraine 12-12-2003 14:41 215217

Prisoner
сапасибо тебе, но старый я учится,
блин тыкал тыкал так и ненатыкал :)
Если можно поправь верхний код,
Мне нужно вывисти с 1 по 15 записть
Заранее спасибо - огромное!

vadimiron 12-12-2003 14:59 215218

Насколько я понимаю надо подправить только строку while:

while($result = mysql_fetch_array(mysql_query("SELECT * FROM news_index WHERE id<'$max' ORDER BY id DESC LIMIT 0,15")))


У меня к Вам и ко всем остальным один вопрос - в скобках цикла while вроде должно стоять условие выполнения этого цикла, а у Вас стоит присвоение значений переменной $result, в этом случае я не понимаю, в чём заключается условте???

Я бы написал бы данный кусок кода вот так:

$sql=mysql_query("SELECT * FROM news_index WHERE id<'$max' ORDER BY id DESC LIMIT 0,15");
for($i=0;$i<$sql;$i++)
{
$result=mysql_fetch_array($sql);
//и далее всё, что нужно при каждом выполнении цикла  
}  

Добавлено:

УПС
написал глупость
вот правильный код:

Я бы написал бы данный кусок кода вот так:

$sql=mysql_query("SELECT * FROM news_index WHERE id<'$max' ORDER BY id DESC LIMIT 0,15");
for($i=0;$i<mysql_num_rows($sql);$i++)
{
$result=mysql_fetch_array($sql);
//и далее всё, что нужно при каждом выполнении цикла  
}

Prisoner 13-12-2003 03:06 215219

vadimiron
Цитата:

Краеугольный камень PHP - выражения.
mysql_fetch_array - построчно загоняет в массив результаты запроса и как только они кончились, вернет FALSE, что будет являться окончанием обработки.

Имхо, вариант с WHILE более читабелен и лаконичен, но вы конечно же можете быть со мной не согласны :)

tradeukraine,  мне кажется, что vadimiron ответил на вопрос, надо исправить лишь запросик к базе данных.

"Ну и запросы у вас" - сказала база данных и повисла. :)

tradeukraine 13-12-2003 12:59 215220

Люди добрые спасибо Вам огромное!

vadimiron 13-12-2003 15:57 215221

Prisoner
Цитата:

оффтопик: "Ну и запросы у вас" - сказала база данных и повисла.
А у меня вроде проходит
:)
:biggrin:


Время: 23:12.

Время: 23:12.
© OSzone.net 2001-