Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Компьютеры + Интернет » Вебмастеру » Научите меня правильно строить сложные запросы к базе данных

Ответить
Настройки темы
Научите меня правильно строить сложные запросы к базе данных

Аватара для vadimiron

Ветеран


Сообщения: 1864
Благодарности: 120


Конфигурация

Профиль | Отправить PM | Цитировать


Пhедположим такая ситуация
Есть 2 таблицы: users, ids
В первой есть строки name, email
Во второй: name, id
Задача запроса: вывести name, email из первой таблицы когда name из 1 равен name из 2 и id равен 5

Я пишу:
select A.name, A.email from users A, ids B where A.name=B.name and B.ids=5

Но такой вариант не проходит
Подскажите плиззз где у меня ошибка

[s]Исправлено: vadimiron, 1:48 22-05-2004[/s]

-------
Fortes fortuna adiuvat


Отправлено: 00:25, 22-05-2004

 

Аватара для vadimiron

Ветеран


Сообщения: 1864
Благодарности: 120

Профиль | Отправить PM | Цитировать


Vlad Drakula

Сенкс, но же написал что сам запрос был неправильно составлен, то есть с лишними скобками, и естественно mysql_fetch_row() выдавал ошибку, так как не получал нормальной инфы из запроса

Сейчас всё работает

-------
Fortes fortuna adiuvat


Отправлено: 02:28, 29-05-2004 | #11



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

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Ночной странник


Contributor


Сообщения: 4050
Благодарности: 83

Профиль | Сайт | Отправить PM | Цитировать


Prisoner
а что означает DISTINCT

Добавлено:

vadimiron
дело в том что в данной задаче очень сложно определить нужны ли индексы и какие именно!

если нужна оптимизация то я бы посоветовал сделать одну таблицу с тремя полями и индексом по id.

на мой взгляд это будет наиболее оптимальный вариант!

-------
можно практически все, но просто мы это еще не знаем.
главный враг програмиста это копипастинг
За хорошее сообщение не забываем нажимать ссылочку "Полезное сообщение"!


Отправлено: 02:29, 29-05-2004 | #12

mar mar вне форума

Аватара для mar

just mar


Moderator


Сообщения: 3904
Благодарности: 163

Профиль | Отправить PM | Цитировать


Vlad Drakula
Цитата:
DISTINCT
- значит выбор несовпадающего

Отправлено: 13:43, 29-05-2004 | #13


Аватара для Prisoner

Engrossed by the Void


Сообщения: 2229
Благодарности: 60

Профиль | Отправить PM | Цитировать


Выбор несовпадающего... угу. Вообще говоря
Цитата MySQL manual:
Параметры (опции) DISTINCT, DISTINCTROW и ALL указывают, должны ли возвращаться дублирующиеся записи. По умолчанию установлен параметр (ALL), т.е. возвращаются все встречающиеся строки. DISTINCT и DISTINCTROW являются синонимами и указывают, что дублирующиеся строки в результирующем наборе данных должны быть удалены.
На счет организации данных. Исходя из того, что сессия в общем-то необходима одна , то получается, что можно сделать одну таблицу:
Код: Выделить весь код
CREATE TABLE `users` (
  `u_id` TINYINT(5) UNSIGNED NOT NULL AUTO_INCREMENT,
  `s_id` CHAR(32) NOT NULL,
  `s_init_time` TIMESTAMP(14) NOT NULL,
  `u_name` CHAR(100) NOT NULL,
  `u_mail` CHAR(50) NOT NULL,
  PRIMARY KEY (`u_id`),
  UNIQUE KEY `u_id` (`u_id`),
  UNIQUE KEY `s_id` (`s_id`),
  UNIQUE KEY `u_mail` (`u_mail`)
);
Правда уникальность некоторых полей дает неудобства при вставке новой позиции, скажем, здесь необходимо уже иметь уникальный номер сессии (UID автоинкрементный, а мыльница у нас есть из формы). Выбор типа столбца для даты начала сессии обусловлен принципом общности - мало ли когда она начата... Правда тут уже загвоздка, как по таблице определить начал пользователь сессию или нет? Стало быть уникальность сессии надо убрать и если это поле пустое, то сессия не начата, а данные в поле даты - не адекватны.

-------
Не могу дать более дельный совет - не хватает системных ресурсов...


Отправлено: 17:09, 30-05-2004 | #14


Аватара для vadimiron

Ветеран


Сообщения: 1864
Благодарности: 120

Профиль | Отправить PM | Цитировать


Не, у меня в голове не очень укладывается, как это всё в одну таблицу запихнуть, читсо логически: сессии-это что то очень динамическое, если юзер определённое время не был активен то есть не делал никаких действий, то сессия стирается, таким образом всё время какие то движения происходят там, что то добавляется, что то стирается, а таблица с юзерами статична, изменения редко бывают, а теперь представим, что у меня записано 1000 юзеров, и что, каждый раз придётся проверять все 1000 строк, чтобы узнать устарела ли сессия или нет

Добавлено:

Верней, чтобы узнать какие сессии стирать можно  а какие ещё рано

-------
Fortes fortuna adiuvat


Отправлено: 21:36, 30-05-2004 | #15


Аватара для Prisoner

Engrossed by the Void


Сообщения: 2229
Благодарности: 60

Профиль | Отправить PM | Цитировать


А как ты выявляешь факт устаревании сессии? Ну пусть какой-то такой факт есть. Скажем это время - пусть сессия выделяется на 5 часов (сразу прикинь на каком типе ресурсов это окажется незаменимым ) и факт нажатия на ссылку "выход". В любом случае перед уничтожением сессии опустоши в таблице поле этой сессии для конкретного пользователя, по той логике, что была предложена выше это означает, что сессия закрыта. Еще ко всему, каждый раз когда делаешь это опустошай (и удаляй сессии PHP) поле сессий которые зарегестрированы более 5ти часов назад. Для этого достаточно выполнить всего два запроса.
Для шага (а)
Код: Выделить весь код
UPDATE `users` SET `s_id` = '' WHERE `u_id` = какой_то_там
Для шага (б)
Код: Выделить весь код
UPDATE `users` SET `s_id` = '' WHERE `s_init_time` < (CURRENT_TIMESTAMP() - 18000)
Причем следует знать, что первый в таблице столбец типа timestamp означивается в операциях INSERT, UPDATE текущей датой в том случае, если он явно не указан в этих операциях (есть еще уточняющие моменты, но их можно найти в мануале). Это нам не мешает, а даже наруку.

-------
Не могу дать более дельный совет - не хватает системных ресурсов...


Отправлено: 22:21, 30-05-2004 | #16



Компьютерный форум OSzone.net » Компьютеры + Интернет » Вебмастеру » Научите меня правильно строить сложные запросы к базе данных

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
C/C++ - Как правильно задать тип данных в массиве ShadowMas Программирование и базы данных 4 18-04-2009 22:26
не удается подключиться к базе данных сервера WSUS Rkiller WSUS 10 09-02-2009 17:08
MySQL - [решено] сохранение данных в базе данных Mysql TigerZaka Программирование и базы данных 4 24-08-2008 15:48
Представление файловой системы в базе данных Amina Программирование и базы данных 1 29-03-2004 14:50
Дробление табличек в базе данных x404 Программирование и базы данных 2 23-10-2003 02:21




 
Переход