Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: PHP и MySQL

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (2): [1] 2 »   

> Описание: Помогите с кодом.
Babyaka
Отправлено: 29 Августа, 2011 - 19:12:39
Post Id


Новичок


Покинул форум
Сообщений всего: 3
Дата рег-ции: Авг. 2011  


Помог: 0 раз(а)




Нужно написать скрипт, не знаю как сделать. Имеется три SQL таблицы: Users, IСQ и Groups.
Users содержит две колонки, user_id (1,2,3,...) и user_name (Вася, Петя, Маша,...). IСQ содержит тоже две колонки, user_id (1,2,3,...) и IСQ (123,321,231,...). Groups содержит, user_id (1,2,3,...) и group_id (1,2,1,3,...). Нужно, чтобы выводился список пользователей, и при нажатии, показывалось, в какой он группе, и какой у него номер iсq.
 
 Top
Mr.KreDo
Отправлено: 29 Августа, 2011 - 19:36:47
Post Id



Гость


Покинул форум
Сообщений всего: 65
Дата рег-ции: Апр. 2011  
Откуда: Старый Оскол, Россия


Помог: 0 раз(а)




Babyaka пишет:
Нужно написать скрипт, не знаю как сделать. Имеется три SQL таблицы: Users, IСQ и Groups.
Users содержит две колонки, user_id (1,2,3,...) и user_name (Вася, Петя, Маша,...). IСQ содержит тоже две колонки, user_id (1,2,3,...) и IСQ (123,321,231,...). Groups содержит, user_id (1,2,3,...) и group_id (1,2,1,3,...). Нужно, чтобы выводился список пользователей, и при нажатии, показывалось, в какой он группе, и какой у него номер iсq.


Вот посмотри так ?
http://www[dot]adrenaline-gamer[dot]ru/test.php
 
 Top
LIME
Отправлено: 29 Августа, 2011 - 19:40:52
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




Babyaka вы понимаете что зря 3 таблицы делали? объединяйте и горя не будет
 
 Top
Mr.KreDo
Отправлено: 29 Августа, 2011 - 19:48:28
Post Id



Гость


Покинул форум
Сообщений всего: 65
Дата рег-ции: Апр. 2011  
Откуда: Старый Оскол, Россия


Помог: 0 раз(а)




Babyaka

вот выполните запрос, тут я сделал обьедениение

CODE (SQL):
скопировать код в буфер обмена
  1. --
  2. -- Структура таблицы `Users`
  3. --
  4.  
  5. CREATE TABLE IF NOT EXISTS `Users` (
  6.   `id` int(3) NOT NULL AUTO_INCREMENT,
  7.   `user_name` text NOT NULL,
  8.   `icq` text NOT NULL,
  9.   `group_id` int(3) NOT NULL,
  10.   PRIMARY KEY (`id`)
  11. ) ENGINE=MyISAM  DEFAULT CHARSET=cp1251 AUTO_INCREMENT=5 ;
  12.  
  13. --
  14. -- Дамп данных таблицы `Users`
  15. --
  16.  
  17. INSERT INTO `Users` (`id`, `user_name`, `icq`, `group_id`) VALUES
  18. (1, 'Вася', '123', 1),
  19. (2, 'Петя', '321', 2),
  20. (3, 'Маша', '231', 1),
  21. (4, 'Test', '4080925', 8);

(Отредактировано автором: 29 Августа, 2011 - 19:56:53)

 
 Top
Babyaka
Отправлено: 29 Августа, 2011 - 20:54:53
Post Id


Новичок


Покинул форум
Сообщений всего: 3
Дата рег-ции: Авг. 2011  


Помог: 0 раз(а)




Объединение не канает, база уже большая и готовая. Подскажите пожалуйста. Как уже с этими тремя таблицами работать?
 
 Top
Mr.KreDo
Отправлено: 29 Августа, 2011 - 21:10:38
Post Id



Гость


Покинул форум
Сообщений всего: 65
Дата рег-ции: Апр. 2011  
Откуда: Старый Оскол, Россия


Помог: 0 раз(а)




Babyaka пишет:
Объединение не канает, база уже большая и готовая. Подскажите пожалуйста. Как уже с этими тремя таблицами работать?


тебе так нужно ?

http://www[dot]adrenaline-gamer[dot]ru/test.php
 
 Top
Mr.KreDo
Отправлено: 29 Августа, 2011 - 23:49:19
Post Id



Гость


Покинул форум
Сообщений всего: 65
Дата рег-ции: Апр. 2011  
Откуда: Старый Оскол, Россия


Помог: 0 раз(а)




Вот код:
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2.  
  3. /* создать соединение */
  4. $hostname = "localhost";
  5. $username = "wm33744_test";
  6. $password = "test";
  7. $dbName = "wm33744_test";
  8.  
  9. $db = mysql_connect($hostname,$username,$password) OR DIE("Идет Перезагрузка MySQL");
  10. mysql_query('SET NAMES "cp1251"');
  11. @mysql_select_db("$dbName") or die("Не могу выбрать базу данных ");
  12.  
  13. if (isset($_GET['id'])) {$id = $_GET['id'];}
  14.  
  15. if (!isset($id))
  16.  
  17. {
  18. $result = mysql_query("SELECT `id`,`user_name` FROM `Users`");      
  19.  
  20. while( $myrow = mysql_fetch_array( $result ) ) {
  21.     printf ("<p><a href='?id=%s'>%s</a></p>",$myrow["id"],$myrow["user_name"]);
  22. }
  23.  
  24. }
  25.  
  26. else
  27.  
  28. {
  29.  
  30. $result = mysql_query("SELECT `user_id`,`user_name` FROM `Users` WHERE `id`='$id'");      
  31. $myrow = mysql_fetch_array($result);
  32.  
  33. $result2 = mysql_query("SELECT `icq` FROM `IСQ` WHERE `user_id`='$myrow[user_id]'");      
  34. $myrow2 = mysql_fetch_array($result2);
  35.  
  36. $result3 = mysql_query("SELECT `group_id` FROM `Groups` WHERE `user_id`='$myrow[user_id]'");      
  37. $myrow3 = mysql_fetch_array($result3);
  38.  
  39. print <<<HERE
  40. <p>Пользователь: $myrow[user_name]</p>
  41. <p>Группа: $myrow3[group_id]</p>
  42. <p>Номер ICQ: $myrow2[icq]</p>
  43. HERE;
  44.  
  45. }
  46. ?>
 
 Top
Babyaka
Отправлено: 30 Августа, 2011 - 08:42:02
Post Id


Новичок


Покинул форум
Сообщений всего: 3
Дата рег-ции: Авг. 2011  


Помог: 0 раз(а)




Mr.KreDo пишет:
Вот код:
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2.  
  3. /* создать соединение */
  4. $hostname = "localhost";
  5. $username = "wm33744_test";
  6. $password = "test";
  7. $dbName = "wm33744_test";
  8.  
  9. $db = mysql_connect($hostname,$username,$password) OR DIE("Идет Перезагрузка MySQL");
  10. mysql_query('SET NAMES "cp1251"');
  11. @mysql_select_db("$dbName") or die("Не могу выбрать базу данных ");
  12.  
  13. if (isset($_GET['id'])) {$id = $_GET['id'];}
  14.  
  15. if (!isset($id))
  16.  
  17. {
  18. $result = mysql_query("SELECT `id`,`user_name` FROM `Users`");      
  19.  
  20. while( $myrow = mysql_fetch_array( $result ) ) {
  21.     printf ("<p><a href='?id=%s'>%s</a></p>",$myrow["id"],$myrow["user_name"]);
  22. }
  23.  
  24. }
  25.  
  26. else
  27.  
  28. {
  29.  
  30. $result = mysql_query("SELECT `user_id`,`user_name` FROM `Users` WHERE `id`='$id'");      
  31. $myrow = mysql_fetch_array($result);
  32.  
  33. $result2 = mysql_query("SELECT `icq` FROM `IСQ` WHERE `user_id`='$myrow[user_id]'");      
  34. $myrow2 = mysql_fetch_array($result2);
  35.  
  36. $result3 = mysql_query("SELECT `group_id` FROM `Groups` WHERE `user_id`='$myrow[user_id]'");      
  37. $myrow3 = mysql_fetch_array($result3);
  38.  
  39. print <<<HERE
  40. <p>Пользователь: $myrow[user_name]</p>
  41. <p>Группа: $myrow3[group_id]</p>
  42. <p>Номер ICQ: $myrow2[icq]</p>
  43. HERE;
  44.  
  45. }
  46. ?>

Да, именно так. Спасибо большое!
 
 Top
MrBeard
Отправлено: 30 Августа, 2011 - 15:34:14
Post Id



Гость


Покинул форум
Сообщений всего: 97
Дата рег-ции: Авг. 2011  


Помог: 2 раз(а)




а почему вместо трёх селектов не использовать один?

CODE (SQL):
скопировать код в буфер обмена
  1. SELECT user_name, icq, group_id
  2. FROM Users
  3. JOIN ICQ USING(user_id)
  4. JOIN Groups USING(user_id)
  5. WHERE user_id = %variable%;

(Отредактировано автором: 30 Августа, 2011 - 15:36:32)

 
 Top
Mr.KreDo
Отправлено: 30 Августа, 2011 - 18:05:32
Post Id



Гость


Покинул форум
Сообщений всего: 65
Дата рег-ции: Апр. 2011  
Откуда: Старый Оскол, Россия


Помог: 0 раз(а)




MrBeard пишет:
а почему вместо трёх селектов не использовать один?


например мне просто не привычно так делать.
 
 Top
iflight
Отправлено: 30 Августа, 2011 - 18:16:49
Post Id



Гость


Покинул форум
Сообщений всего: 119
Дата рег-ции: Март 2011  
Откуда: Россия, Сыктывкар


Помог: 2 раз(а)




Чем меньше запросов - тем лучше, в большинстве случаев и в этом в том числе
 
 Top
Mr.KreDo
Отправлено: 30 Августа, 2011 - 18:26:39
Post Id



Гость


Покинул форум
Сообщений всего: 65
Дата рег-ции: Апр. 2011  
Откуда: Старый Оскол, Россия


Помог: 0 раз(а)




iflight пишет:
Чем меньше запросов - тем лучше, в большинстве случаев и в этом в том числе


не спорю.
(Добавление)

где можно почитать на счет этого ?
CODE (SQL):
скопировать код в буфер обмена
  1.     SELECT user_name, icq, group_id
  2.     FROM Users
  3.     JOIN ICQ USING(user_id)
  4.     JOIN Groups USING(user_id)
  5.     WHERE user_id = %variable%;

(Отредактировано автором: 30 Августа, 2011 - 18:28:35)

 
 Top
MrBeard
Отправлено: 30 Августа, 2011 - 18:55:53
Post Id



Гость


Покинул форум
Сообщений всего: 97
Дата рег-ции: Авг. 2011  


Помог: 2 раз(а)




Цитата:
где можно почитать на счет этого ?
CODE (SQL):
скопировать код в буфер обмена
  1.     SELECT user_name, icq, group_id
  2.     FROM Users
  3.     JOIN ICQ USING(user_id)
  4.     JOIN Groups USING(user_id)
  5.     WHERE user_id = %variable%;

к примеру
http://www[dot]intuit[dot]ru/department/database/sql/

а для начала просто пара доков по разным JOIN и UNION, да и SELECT FROM SELECT с примерами подойдёт
я, кажется, здесь начинал читать - http://anton-pribora[dot]ru/articles[dot][dot][dot]ysql/mysql-join/
 
 Top
LIME
Отправлено: 30 Августа, 2011 - 19:37:14
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




Mr.KreDo прочитайте любой текст по мускулу
"мускул за 24 часа для чайников : Основы " )))
(Добавление)
iflight пишет:
Чем меньше запросов - тем лучше, в большинстве случаев
абсолютно во всех случаях
 
 Top
MrBeard
Отправлено: 30 Августа, 2011 - 19:49:52
Post Id



Гость


Покинул форум
Сообщений всего: 97
Дата рег-ции: Авг. 2011  


Помог: 2 раз(а)




LIME пишет:
абсолютно во всех случаях


ну, не знаю... может, у меня пепяки не хватает, но иногда получается с промежуточным запросом быстрее. или я пишу неправильно... но в случае больших таблиц запрос типа
CODE (SQL):
скопировать код в буфер обмена
  1.  
  2. SELECT *
  3. FROM t1
  4. WHERE t1.c1 NOT IN( SELECT c1 FROM t2 WHERE c2 = %var%)


выполняется куда дольше, чем если бы я отдельно выбрал select c1 from t2 where c2 = %var% и сохранил бы в темповой таблице... ааа, и группировка в подзапросе ещё ОЧЕНЬ сильно тормозит запрос.

ничего лучше сейчас не придумаю, но вспомню ещё примеры - напишу...

(Отредактировано автором: 30 Августа, 2011 - 19:50:27)

 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Напишите за меня, пожалуйста »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB