Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Двойной запрос
 
 автор: Ozxar   (09.09.2005 в 02:54)   письмо автору
 
 

Вот сколько читал так и не понял как делать двойные запросы.... ну например есть две базы в одной храниться весь купленный товар в другой список покупателей... база товаров разбита по категориям (таблицы) а как сделать чтоб при просмотре пользователя и индификаторм ид (первичный ключ) можно было увидеть какой он товар купил в каждой строке есть столбец user_id ?

и как сделать это на основе одной базы и нескольких таблиц?

   
 
 автор: cheops   (09.09.2005 в 14:30)   письмо автору
 
   для: Ozxar   (09.09.2005 в 02:54)
 

Да в общем просто следует расширить имена и включить имена баз данных - вы бы не могли привести CREATE TABLE таблиц, которые участвуют в запросе и имена баз данных?

   
 
 автор: Ozxar   (09.09.2005 в 22:26)   письмо автору
 
   для: cheops   (09.09.2005 в 14:30)
 

к сожелению не могу..... так это просто пример из головы... просто хотелось узнать на примере...

   
 
 автор: cheops   (10.09.2005 в 00:39)   письмо автору
 
   для: Ozxar   (09.09.2005 в 22:26)
 

Внешне это выглядит примерно так
mysql> SELECT db1.tbl1.id, db1.tbl1.name, db2.tbl2.letter FROM db1.tbl1, db2.tbl2 
    -> WHERE db1.tbl1.id = db2.tbl2.id;

   
 
 автор: Ozxar   (15.09.2005 в 01:38)   письмо автору
 
   для: cheops   (10.09.2005 в 00:39)
 

а вот например выбирая значения из базы portal_account из строки столбец с о значением machine получаем номер потом идем в таблицу Portal_mashine от туда берем строку со значением ид равное machine и выбираем значения slot1 slot2 slot 3 ... slot10 смотрим из них не равен 0 и после отсева не нужных значений выбераем их из базы portal_base индификаторы (которые были в слотах) вы бираем их и одинаковые столбцы складываем в месте получаем нвый массив данных...

вроде все если не понятно объясню =)))

   
 
 автор: cheops   (15.09.2005 в 02:40)   письмо автору
 
   для: Ozxar   (15.09.2005 в 01:38)
 

Не понятно :))) Вы бы не могли бы привести структуры таблиц и поподробнее объяснить, что должно быть в конце?

   
 
 автор: Ozxar   (15.09.2005 в 19:18)   письмо автору
 
   для: cheops   (15.09.2005 в 02:40)
 

ну напиример...... из столбца ship взять значения


CREATE TABLE 'games_account' (
  'id' int(11) NOT NULL auto_increment,
  'login' varchar(255) NOT NULL default '',
  'password' varchar(255) NOT NULL default '',
  'last_login' datetime NOT NULL default '0000-00-00 00:00:00',
  'key' varchar(255) NOT NULL default '',
  'name' varchar(255) NOT NULL default '',
  'family' varchar(255) NOT NULL default '',
  'sex' varchar(20) NOT NULL default '0',
  'date' varchar(10) NOT NULL default '',
  'date_reg' varchar(10) NOT NULL default '',
  'email' varchar(255) NOT NULL default '',
  'city' varchar(255) NOT NULL default '',
  'country' varchar(255) NOT NULL default '',
  'clan' int(3) NOT NULL default '0',
  'status' varchar(255) NOT NULL default '',
  'sector' int(11) NOT NULL default '0',
  'planet' int(11) NOT NULL default '0',
  'info' text NOT NULL,
  'chat_ban' set('y','n') NOT NULL default '',
  'forum_ban' set('y','n') NOT NULL default '',
  'auto' int(11) NOT NULL default '0',
  'ship' int(11) NOT NULL default '0',
  'training' int(11) NOT NULL default '0',
  PRIMARY KEY  ('id')
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=6 ;


перейти в базу


CREATE TABLE 'games_mashine' (
  'id' int(11) NOT NULL auto_increment,
  'name' varchar(255) NOT NULL default '',
  'armor' int(11) NOT NULL default '0',
  'mass' int(11) NOT NULL default '0',
  'battery' int(11) NOT NULL default '0',
  'heat' int(11) NOT NULL default '0',
  'heals' int(11) NOT NULL default '0',
  'speed' int(11) NOT NULL default '0',
  'sale' int(11) NOT NULL default '0',
  'load' int(11) NOT NULL default '0',
  'slot1' int(5) NOT NULL default '0',
  'slot2' int(5) NOT NULL default '0',
  'slot3' int(5) NOT NULL default '0',
  'slot4' int(5) NOT NULL default '0',
  'slot5' int(5) NOT NULL default '0',
  'slot6' int(5) NOT NULL default '0',
  'slot7' int(5) NOT NULL default '0',
  'slot8' int(5) NOT NULL default '0',
  'slot9' int(5) NOT NULL default '0',
  'slot10' int(5) NOT NULL default '0',
  PRIMARY KEY  ('id')
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=1 ;


выбрать все столбцы slot


CREATE TABLE 'games_module' (
  'id' int(11) NOT NULL default '0',
  'name' varchar(255) NOT NULL default '',
  'mod' int(11) NOT NULL default '0',
  'mod1' int(11) NOT NULL default '0',
  'mod2' int(11) NOT NULL default '0'
) ENGINE=MyISAM DEFAULT CHARSET=cp1251;


и все индификаторы всех слотов из ид выбрать из этой базы и их значения всех мод и сложит их так же мод1 и мод2

   
 
 автор: napTu3aH   (15.09.2005 в 19:33)   письмо автору
 
   для: Ozxar   (15.09.2005 в 19:18)
 

>Ozxar:
>Мдя.. значит ты нам не конкурент... =))) Эт радует
100% не конкурент ;-) хотя я тоже думал над этим вариантом

   
 
 автор: Ozxar   (15.09.2005 в 19:42)   письмо автору
 
   для: napTu3aH   (15.09.2005 в 19:33)
 

всмысле я имел ввиду по жанру... Понимаете программистов много и уу них свой подход на каждый выход... есть лучший и худший, быстрый и долгий... А это главный фактор...
1 сотая секунда может ссыграть злую шутку...

   
 
 автор: napTu3aH   (15.09.2005 в 19:41)   письмо автору
 
   для: Ozxar   (15.09.2005 в 19:18)
 

Вам нужно создать еще одну таблицу(если ее еще нет), которая будет связывать все эти таблицы вместе.


CREATE TABLE 'games_comunicator' (
'id' int(11) NOT NULL auto_increment PRYMARY_KEY,
'id_account' int(11) NOT NULL,
'games_mashine' int(11) NOT NULL,
'games_module' int(11) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=cp1251;


А потом уже при помощи этой таблицы выбирать нужные вам значения

   
 
 автор: Ozxar   (15.09.2005 в 19:46)   письмо автору
 
   для: napTu3aH   (15.09.2005 в 19:41)
 

не пойдет =) вариант был отвергнут =)) причем сразу...

   
 
 автор: napTu3aH   (16.09.2005 в 09:33)   письмо автору
 
   для: Ozxar   (15.09.2005 в 19:46)
 

>не пойдет =) вариант был отвергнут =)) причем сразу...
Очень интересно почему? Разве эту связь можно подделать на клиентской машине?

   
 
 автор: cheops   (15.09.2005 в 22:59)   письмо автору
 
   для: Ozxar   (15.09.2005 в 19:18)
 

Брр... всё равно не понятно, что значит "перейти в базу". Таблицы games_account, games_mashine и games_module находятся в разных базах данных или одной?

   
 
 автор: Ozxar   (15.09.2005 в 23:24)   письмо автору
 
   для: cheops   (15.09.2005 в 22:59)
 

да в одной... черт =) сложно все тут... =))
Ну попробую еще раз =))

games_account в столбце ыршз берм значение например 11111 с ним идем в games_mashine от туда выбираем все столбцы slot1...10 и уже с этими значениями идем в

games_module и делаем выборку по значениям (из стобцов слотов) и сумируем в этой таблице все значения одного столбца

   
 
 автор: cheops   (16.09.2005 в 01:11)   письмо автору
 
   для: Ozxar   (15.09.2005 в 23:24)
 

>"с ним идем в"
А каким образом? Сохраняем в отдельную переменную или как?

   
 
 автор: Ozxar   (16.09.2005 в 02:53)   письмо автору
 
   для: cheops   (16.09.2005 в 01:11)
 

в сессию загоняяем основные параметры

   
 
 автор: napTu3aH   (16.09.2005 в 09:37)   письмо автору
 
   для: Ozxar   (16.09.2005 в 02:53)
 

Вы в сессию будеет загонять все данные из разных таблиц, для какого-то конкретного игрока?

   
 
 автор: Ozxar   (16.09.2005 в 17:51)   письмо автору
 
   для: napTu3aH   (16.09.2005 в 09:37)
 

а счего вы взяли что это из игры??? =)))

   
 
 автор: napTu3aH   (16.09.2005 в 19:17)   письмо автору
 
   для: Ozxar   (16.09.2005 в 17:51)
 

методом дедукции ;-)

   
 
 автор: Ozxar   (17.09.2005 в 07:15)   письмо автору
 
   для: napTu3aH   (16.09.2005 в 19:17)
 

Вообшето это база данных склада =)))

   
 
 автор: cheops   (16.09.2005 в 13:16)   письмо автору
 
   для: Ozxar   (16.09.2005 в 02:53)
 

Поле ship таблицы games_account как связано с таблицей games_mashine? Т.е. в games_mashine какое поле ему соответсвует?

   
 
 автор: Ozxar   (16.09.2005 в 17:39)   письмо автору
 
   для: cheops   (16.09.2005 в 13:16)
 

ship есть номер id в games_mashine

   
 
 автор: napTu3aH   (16.09.2005 в 19:34)   письмо автору
 
   для: Ozxar   (16.09.2005 в 17:39)
 

Если я правильно понял то в поле slot1-slot10 храняться идентификаторы игрового модуля.

SELECT
games_mashine.slot1 as gm_s1,
games_mashine.slot2 as gm_s2,
games_module.mod1 as gmod1,
games_module.mod2 as gmod2,
games_module.mod1+games_module.mod1 as gmod_sum
FROM
games_account,
games_mashine,
games_module
WHERE games_account.ship = games_mashine.id 
AND games_mashine.slot1 = games_module.id

Фух ну и запросик :)

!!!!!test!!!!

   
 
 автор: Ozxar   (17.09.2005 в 07:17)   письмо автору
 
   для: napTu3aH   (16.09.2005 в 19:34)
 

хм.... значит альтернативных вариантов нема =( жаль... ну ладно

   
 
 автор: Hiper   (17.09.2005 в 16:48)   письмо автору
 
   для: Ozxar   (17.09.2005 в 07:17)
 

А вы не могли бы подробнее описать это??? запрос??

   
 
 автор: napTu3aH   (17.09.2005 в 17:33)   письмо автору
 
   для: Hiper   (17.09.2005 в 16:48)
 


SELECT 
games_mashine.slot1 as gm_s1, 
#из таблицы "games_mashine" берем столбец "slot1" и присваеваем ему имя "gm_s1" при формировании результата. Дальше тоже самое только другая таблица или столбец
games_mashine.slot2 as gm_s2, 
games_module.mod1 as gmod1, 
games_module.mod2 as gmod2, 
games_module.mod1+games_module.mod2 as gmod_sum 
#суммируем значение "mod1" и "mod2", присваеваем ему имя "gmod_sum"
FROM 
#дальше перечисляем таблицы из которых производиться выборка
games_account, 
games_mashine, 
games_module 
WHERE games_account.ship = games_mashine.id 
#задаем условия формирования результата
AND games_mashine.slot1 = games_module.id

   
 
 автор: Hiper   (17.09.2005 в 17:59)   письмо автору
 
   для: napTu3aH   (17.09.2005 в 17:33)
 

хм... а вот как получить вывод результата в коде

P.S. Mysql незнаю вообше только начал изучать

   
 
 автор: napTu3aH   (17.09.2005 в 19:50)   письмо автору
 
   для: Hiper   (17.09.2005 в 17:59)
 

Для начала нужно соединиться с БД, для этого вам потребуються имя хостера, где стоит Мускул
Имя пользователя, пароль, и название БД, если она существует.

$hostname="";
$username="";
$password="";
$dbname="";

Дальше устанавливаем соединение с БД

mysql_connect($hostname, $username, $password);
mysql_select_db("$dbname");

Потом формируем нужный вам запрос и отправляем его в БД

$sql="SELECT * FROM $table";
$result=mysql_query($sql);

Теперь в переменной $result у вас массив полученный из Базы, чтобы его вывести в браузер существует много способов, зависящих от конкретной ситуации.

   
 
 автор: Hiper   (18.09.2005 в 21:55)   письмо автору
 
   для: napTu3aH   (17.09.2005 в 19:50)
 

Спасибо немного разобрался =))

да кстати ваш запрос выводит нолевое значение.... но это не важно

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования