|
|
|
| Нужно выводить текст из базы данных по 4 пункта.
Всего в базе данных 9 пунктов.
Тоесть: 1234, 5678, 9123, 4567, 8912, 3456, 7891, 2345, 6789
Как Вы видите дальше оно будет повториться, так вот нужно создать запрос, который выводил при следующим посещении странице следующую четвеку.
Принимаются все предложения. Заранее спасибо. | |
|
|
|
|
|
|
|
для: worker
(16.08.2005 в 15:14)
| | При каждом посещении ставить cookie с номером последнего выведенного пункта. | |
|
|
|
|
|
|
|
для: worker
(16.08.2005 в 15:14)
| | В этом случае удобнее воспользоваться конструкцией LIMIT
SELECT * FROM tbl LIMIT 1,4
|
Для следующей четвёрки
SELECT * FROM tbl LIMIT 4,4
|
Для следующей
SELECT * FROM tbl LIMIT 8,4
|
Причём последний запрос выведет только одну запись. А переменную с цифрами 1, 4, 8 удобнее действительно хранить в cookie, если требуется, чтобы при каждом следующем обращении выводилась следующая четвёрка.
PS Вопросы, посвящённые базам данных, лучше сразу размещать в разделе http://www.softtime.ru/forum/index.php?id_forum=3 | |
|
|
|
|
|
|
|
для: cheops
(16.08.2005 в 16:01)
| | Спасибо, но кукиес отпадает, т.к. действовать будем не с пользователем а с Б.Д.
Поэтому и нужно чтобы при каждом другом обращении выводилась следующая 4-ка. Есть идея, по поводу вывода, после чего мы делаем заметку в дополнительном столбике, но как это всё реализовать ? Может подскажите возможно ли это при помощи запроса к Б.Д. ? Я полагаю с помощью ЛИМИТа как вы и показали, но как именно ? | |
|
|
|
|
|
|
|
для: worker
(16.08.2005 в 16:28)
| | Т.е. будет обращаться по сути один скрипт? А соединение разрываться между запросами будет? Не могли бы вы подробнее описать задачу и кто какие запросы посылает... есть несколько вариантов, но чтобы сказать определённо - нужно больше подробностей. | |
|
|
|
|
|
|
|
для: cheops
(16.08.2005 в 17:13)
| |
Т.е. будет обращаться по сути один скрипт?
|
Да скрипт будет один.
А соединение разрываться между запросами будет?
|
Да после считывания с Б.Д. и выставлении отметочки о прочтении соединение разрывается.
Большое Вам человеческое спасибо, Вы тут один можите ответить или подсказать по поводу этого вопроса. | |
|
|
|
|
|
|
|
для: worker
(16.08.2005 в 18:16)
| | Тогда использовать переменные сервера MySQL не получится - придётся завести ещё одну таблицу и хранить цифру с которой начинается четвёрка там...
Большое Вам человеческое спасибо, Вы тут один можите ответить или подсказать по поводу этого вопроса.
Нет, здесь подобралось достаточно много сведующего народу, просто они видят, что мы с вами обсуждаем тему и идут к следующей - не вклиниваются. | |
|
|
|
|
|
|
|
для: cheops
(16.08.2005 в 20:08)
| | Согласен, ну а тогда какой будет запрос ? И какой код будет ? Подскажите пожалусто. Дополнительную таблицу можите обозвать как хотите, только укажите, что это дополнительная таблица. | |
|
|
|
|
|
|
|
для: worker
(16.08.2005 в 20:35)
| | Код может выглядеть примерно следующим образом
<?php
// Извлекаем номер из дополнительной таблицы
// tbl - в начале там одна запись с цифрой 1
$query = "SELECT num FROM ext";
$ext = mysql_query($query);
if(!$ext) exit(mysql_error());
$num = mysql_result($ext,0);
// Формируем основной запрос
$query = "SELECT * FROM tbl LIMIT $num, 4";
$tbl = mysql_query($query);
if(!$tbl) exit(mysql_error());
while($result = mysql_fetch_array($tbl))
{
// ...
}
// Изменяем содержимое таблицы ext
$query = "UPDATE ext SET num = num + 4";
if(!mysql_query($query)) exit(mysql_error());
?>
|
| |
|
|
|
|
|
|
|
для: cheops
(16.08.2005 в 23:10)
| | Э-э... Чего-то я недопонял... Если скрипт один, так тогда почему нельзя просто завести переменную РНР и после каждого обращения к БД увеличивать ее на 4? А потом выборку делать с лимитом по этой переменной... Наверное, я все-таки чего-то не понял=) | |
|
|
|
|
|
|
|
для: Киналь
(17.08.2005 в 00:01)
| | Я так понял, переменная должна сохранять свое значение между сеансами... | |
|
|
|
|
|
|
|
для: cheops
(16.08.2005 в 23:10)
| | Класный пример, спасибо. Всё бы устроило, если бы нам не нужно было начинать считывать заново, тогда когда мы доходим до пункта 9.
Наши пункты в Б.Д.:
1
2
3
4
5
6
7
8
9
считываем по 4-ре, тоесть получаем следующее:
1234 - первый запрос
5678 - второй запрос
9123 - третий запрос
4567 - четвертый запрос
8912 - пятый запрос
3456- шестой запрос
7891 - седьмой запрос
2345 - восьмой запрос
6789 - девятый запрос
Ну а дальше как Вы видите будет опять повторение 1234
Надеюсь нормально объяснил. если нет, то задавайте вопросы, на все отвечу в подробнейшем виде. Заранее спасибо. | |
|
|
|
|
|
|
|
для: worker
(17.08.2005 в 00:06)
| | Почему? Ведь в таблице, насколько я понял только 9 записей? MySQL должна уперется в конец таблицы и всё? Или записей больше? | |
|
|
|
|
|
|
|
для: cheops
(17.08.2005 в 01:35)
| | Видимо, запросы должны идти по кругу. Тогда надо каждый раз проверять, сколько записей осталось в таблице. Если меньше четырех - вернуться в начало и считать недостающее до 4х количество записей. | |
|
|
|
|
|
|
|
для: Киналь
(17.08.2005 в 01:58)
| |
Видимо, запросы должны идти по кругу. Тогда надо каждый раз проверять, сколько записей осталось в таблице. Если меньше четырех - вернуться в начало и считать недостающее до 4х количество записей.
|
Верно, так и должно быть, точно в цель.
Вот с этим я и столкнулся. | |
|
|
|
|
|
|
|
для: worker
(17.08.2005 в 09:37)
| | У вас имеется нумерация как пишет woker 1, 2, 3 ...? | |
|
|
|
|
|
|
|
для: cheops
(17.08.2005 в 13:05)
| | Не очень ясен Ваш вопрос, сформулируйте пожалусто поконкретней и кому вопрос ? | |
|
|
|
|
|
|
|
для: worker
(17.08.2005 в 20:44)
| | Ну так что предложения имеются ? | |
|
|
|
|
|
|
|
для: worker
(17.08.2005 в 20:44)
| | Извиняюсь не посмотрел, что это ваш ник :))) Я имею ввиду имеются у вас в таблице поле с номерами
1
2
3
4
5
6
7
8
9
или только
1234 - первый запрос
5678 - второй запрос
9123 - третий запрос
4567 - четвертый запрос
8912 - пятый запрос
3456- шестой запрос
7891 - седьмой запрос
2345 - восьмой запрос
6789 - девятый запрос
Дело в том, что без нумерации по возрастанию достаточно сложно зациклить вывод. | |
|
|
|
|
|
|
|
для: cheops
(18.08.2005 в 02:54)
| | В таблице строки вида:
1
2
3
4
5
6
7
8
9
А нам нужно, чтобы эти строки выдавались по 4-ре штуки. Тоесть 1 раз посетитель зашел на эту страницу и увидел 1234 строки, второй раз зашел и увидел 5678 а в третий раз зашел увидел 9123 ну и т.д.
А это:
1234 - первый запрос
5678 - второй запрос
9123 - третий запрос
4567 - четвертый запрос
8912 - пятый запрос
3456- шестой запрос
7891 - седьмой запрос
2345 - восьмой запрос
6789 - девятый запрос
<--Это я показал для того, чтобы было видно, что получается цикл, ведь после 6789 опять пойдет 1234. | |
|
|
|
|
|
|
|
для: worker
(18.08.2005 в 17:06)
| | Т.е. в таблице присутсвует отдельный столбец с номерами
| |
|
|
|
|
|
|
|
для: cheops
(18.08.2005 в 22:23)
| | Ага | |
|
|
|
|
|
|
|
для: worker
(19.08.2005 в 14:10)
| | Ну что предложения есть ? | |
|
|
|
|
|
|
|
для: worker
(19.08.2005 в 14:10)
| | Тогда следует прибегнуть примерно к следующему коду
<?php
$arr = (1=>'1', 2=>'2', 3=>'3', 4=>'4', 5=>'5', 6=>'6', 7=>'7', 8=>'8', 9=>'9', 10=>'1', 11=>'2', 12=>'3', 13=>'4', 14=>'5', 15=>'6', 16=>'7', 17=>'8', 18=>'9');
// Извлекаем номер из дополнительной таблицы
// tbl - в начале там одна запись с цифрой 1
$query = "SELECT num FROM ext";
$ext = mysql_query($query);
if(!$ext) exit(mysql_error());
$num = mysql_result($ext,0);
// Формируем условие
$where = "WHERE id IN ("
for($i = $num; $i < $num + 4; $i++)
{
$index[] = $arr[$i];
if($i == $num + 3) $last = $arr[$i];
}
$where .= implode(",",$index).")";
unset($index);
// Формируем основной запрос
$query = "SELECT * FROM tbl $where";
$tbl = mysql_query($query);
if(!$tbl) exit(mysql_error());
while($result = mysql_fetch_array($tbl))
{
// ...
}
// Изменяем содержимое таблицы ext
$query = "UPDATE ext SET num = $last";
if(!mysql_query($query)) exit(mysql_error());
?>
|
| |
|
|
|