PDA

Показать полную графическую версию : Сайт на php + MySQL


tradeukraine
08-12-2003, 20:45
Счас использую такой код
$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

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

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

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

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

tradeukraine
09-12-2003, 20:07
немогу понять, как вывисти скажем 1 и 8 запись?

tradeukraine
11-12-2003, 20:29
Народ!
Поможить,
Очень нужно!!!

Prisoner
12-12-2003, 03:11
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
Prisoner
сапасибо тебе, но старый я учится,
блин тыкал тыкал так и ненатыкал :)
Если можно поправь верхний код,
Мне нужно вывисти с 1 по 15 записть
Заранее спасибо - огромное!

vadimiron
12-12-2003, 14:59
Насколько я понимаю надо подправить только строку 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
vadimiron
Краеугольный камень PHP - выражения.

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

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

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

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

tradeukraine
13-12-2003, 12:59
Люди добрые спасибо Вам огромное!

vadimiron
13-12-2003, 15:57
Prisoner
оффтопик: "Ну и запросы у вас" - сказала база данных и повисла.

А у меня вроде проходит
:)
:biggrin:




© OSzone.net 2001-2012