Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Запросы в БД 
V
    Опции темы
Serious2008
Дата 20.9.2011, 21:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 294
Регистрация: 28.1.2011

Репутация: нет
Всего: нет



Мне нужно делать запросы в БД, причём делать запросы так, чтобы к каждой строчке из БД был запрос только от одного человека, я изначально решил, решить эту проблему таким образом.
Получать строку, и автоматически добавлять значение, что эта строчка используется уже. И при получении проверять не используется ли она. 
Но дело в том что оно не всегда может одинаково срабатывать, и может всё таки одна и таже строчка передаться двум людям. Поэтому возникла идея, забирать номера строк из файла. Т.е. читаем из файла число(номер), увеличиваем на 1 считываем строчку с этим номером, пишем этот номер обратно в файл. И тут идея как бы такая, что когда файл открыт для записи он не открыт для чтения и наоборот, поэтому возможность пересечься отпадает. Вот помогите реализовать эту  ситуацию с файлом. 

"Мне нужно открывать файл, с него считать переменную, увеличить её на 1 и записать в файл."

Или предложите какое-нибудь более элегантное решение этой проблемы
PM MAIL   Вверх
patap
Дата 20.9.2011, 22:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 893
Регистрация: 7.5.2005
Где: Украина, Зп

Репутация: 26
Всего: 40



покапай в сторону InnoDB+транзакции


--------------------
На боку кобура болталась, сзади шашка отцовская звякала. 
Впереди меня все хохотало, а позади все плакало (с)
PM MAIL ICQ   Вверх
Serious2008
Дата 20.9.2011, 23:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 294
Регистрация: 28.1.2011

Репутация: нет
Всего: нет



Код

mysql_query("START TRANSACTION");
mysql_query("SET AUTOCOMMIT=0");
$q = mysql_query("SELECT * FROM klient WHERE stat = 0 OR stat = 3 OR stat = 4 LIMIT 1 FOR UPDATE");
$line = mysql_fetch_array($q, MYSQL_ASSOC);
echo $line['name'];}


вот я такой код использовал для вывода содержимого. Я делал запрос из двух разных браузеров и он мне выводит первую строчку из БД, а на сколько я понял из принципа транзакций, он должен был заблокировать первую строчку после того как я сделал запрос и вывести мне вторую.

Если я что, неправильно понял, поправьте меня.

Это сообщение отредактировал(а) Serious2008 - 21.9.2011, 00:40
PM MAIL   Вверх
vov4eg
Дата 21.9.2011, 07:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 46
Регистрация: 27.6.2011

Репутация: нет
Всего: нет



1. PHP выполняеться на сервере и по этому как бы ты его не запускал, результат будет один и тот же, так как браузеры будут отображать только то что прислал им сервер.
2. Транзакции(на сколько я понимаю) - это несколько запросов к БД, которые обеденены в транзакцию, но смысл в том что если хотя бы один из них не выполниться, то не выполняться и все остальные запросы в данной транзакции.
3. Так как в $line содержаться результаты запроса, то выведи данный массив на страницу(print_r($line)) и просмотри как получить доступ к интересующей тебя строке.

Честно говоря  так и не понял в чем смысл того, что ты делаеш, если можеш опиши подробнее для решения какой задачи ты хочеш использовать подобный подход
PM MAIL   Вверх
Serious2008
Дата 21.9.2011, 09:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 294
Регистрация: 28.1.2011

Репутация: нет
Всего: нет



vov4eg, 
Я пытаюсь получать данные по одной строчке из БД, мне нужно сделать так, чтобы для каждого человека который заходит на сайт, выдавалась новая строчка. 
PM MAIL   Вверх
vov4eg
  Дата 21.9.2011, 14:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 46
Регистрация: 27.6.2011

Репутация: нет
Всего: нет



Думаю можно использовать запрос для определения количества записей в таблице или ID последней записи, с помощью полученных данных ты будешь выводить последнюю доступную строку, для этого просто нужно сформировать запрос:
Код

$id = #запрос для определения ID или количества записей
$q = mysql_query("SELECT * FROM klient WHERE id=$id"); #получаешь одну строку с нужным ID
echo $q['name'];#и выводишь полученный результат на экран

К сожалению не могу более подробно, работа зовет. smile
PM MAIL   Вверх
Sanchezzz
Дата 21.9.2011, 17:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1670
Регистрация: 19.11.2006
Где: Voronezh

Репутация: 41
Всего: 60



заходит человек ты вставляешь запись mysql_insert_id() Вернет ID Вставки Запоминаем его в $_SESSION или куки дальше проверяем если в куках есть запись дергаем ID и работаем с ней  как подметил patap лучши использовать InnoDB


--------------------
Понравился ответ "+" по репе, не забываем закрывать тему, заказы в LS.
PM MAIL Skype GTalk   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0466 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.