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
Форумы портала PHP.SU :: Версия для печати :: PHP и MySQL
Форумы портала PHP.SU » PHP » Напишите за меня, пожалуйста » PHP и MySQL

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

1. Babyaka - 29 Августа, 2011 - 19:12:39 - перейти к сообщению
Нужно написать скрипт, не знаю как сделать. Имеется три 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.
2. Mr.KreDo - 29 Августа, 2011 - 19:36:47 - перейти к сообщению
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
3. LIME - 29 Августа, 2011 - 19:40:52 - перейти к сообщению
Babyaka вы понимаете что зря 3 таблицы делали? объединяйте и горя не будет
4. Mr.KreDo - 29 Августа, 2011 - 19:48:28 - перейти к сообщению
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);
5. Babyaka - 29 Августа, 2011 - 20:54:53 - перейти к сообщению
Объединение не канает, база уже большая и готовая. Подскажите пожалуйста. Как уже с этими тремя таблицами работать?
6. Mr.KreDo - 29 Августа, 2011 - 21:10:38 - перейти к сообщению
Babyaka пишет:
Объединение не канает, база уже большая и готовая. Подскажите пожалуйста. Как уже с этими тремя таблицами работать?


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

http://www[dot]adrenaline-gamer[dot]ru/test.php
7. Mr.KreDo - 29 Августа, 2011 - 23:49:19 - перейти к сообщению
Вот код:
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. ?>
8. Babyaka - 30 Августа, 2011 - 08:42:02 - перейти к сообщению
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. ?>

Да, именно так. Спасибо большое!
9. MrBeard - 30 Августа, 2011 - 15:34:14 - перейти к сообщению
а почему вместо трёх селектов не использовать один?

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%;
10. Mr.KreDo - 30 Августа, 2011 - 18:05:32 - перейти к сообщению
MrBeard пишет:
а почему вместо трёх селектов не использовать один?


например мне просто не привычно так делать.
11. iflight - 30 Августа, 2011 - 18:16:49 - перейти к сообщению
Чем меньше запросов - тем лучше, в большинстве случаев и в этом в том числе
12. Mr.KreDo - 30 Августа, 2011 - 18:26:39 - перейти к сообщению
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%;
13. MrBeard - 30 Августа, 2011 - 18:55:53 - перейти к сообщению
Цитата:
где можно почитать на счет этого ?
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/
14. LIME - 30 Августа, 2011 - 19:37:14 - перейти к сообщению
Mr.KreDo прочитайте любой текст по мускулу
"мускул за 24 часа для чайников : Основы " )))
(Добавление)
iflight пишет:
Чем меньше запросов - тем лучше, в большинстве случаев
абсолютно во всех случаях
15. MrBeard - 30 Августа, 2011 - 19:49:52 - перейти к сообщению
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% и сохранил бы в темповой таблице... ааа, и группировка в подзапросе ещё ОЧЕНЬ сильно тормозит запрос.

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

 

Powered by ExBB FM 1.0 RC1