Forum Webscript.Ru

Программирование => PHP => Тема начата: Turok от 02 Марта 2005, 17:28:21

Название: Вывод данных из двух таблиц
Отправлено: Turok от 02 Марта 2005, 17:28:21
имеется две таблицы
Autor (autor_id, autor_name, autor_mail, autor_www) - юзеры
Work (w_id, w_autor_id, w_text) - работы юзеров

Помогите плиз вывести таблицу типа:
Юзер \\ Майл \\ Сайт \\ Кол-во работ
--------------------------------------------------
делал вот как:

$ath = mysql_query("select * from Autor");
if($ath)
{
  echo "";
  echo "";
  while($autor = mysql_fetch_array($ath))
  {
    echo "
    ";
  }
  echo "
ИмяМылоСайтКол-во работ
".$autor[\'autor_name\']." ".$autor[\'autor_mail\']." ".$autor[\'autor_www\']." ".$tut_neznau_chto." 
";
}
else
{
  echo "

Error: ".mysql_error()."

";
  exit();
}
 

------------------------
выводит нормально, НО!!! не могу получить данные в (Кол-во работ)
в таблице Work живут работы юзеров, в поле w_autor_id проставляется autor_id из таблицы Autor
Можно ли вывести все одним селектом? и как тогда переписать массив?

Заранее спасибо за помощь.

Название: Вывод данных из двух таблиц
Отправлено: Меняздесьдавнонет от 02 Марта 2005, 17:30:46
не массив, наверное, а запрос - ты хотел сказать?
Название: Вывод данных из двух таблиц
Отправлено: Turok от 02 Марта 2005, 17:38:37
упс.. спасибо за поправку =) имелся в виду запрос
Название: Вывод данных из двух таблиц
Отправлено: Меняздесьдавнонет от 02 Марта 2005, 17:42:07
это не поправка - это вопрос.
Чтобы не гадать, что на самом деле имелось в виду.

знакомы ли тебе такие команды, как join и count?
Название: Вывод данных из двух таблиц
Отправлено: Turok от 02 Марта 2005, 17:49:21
если чесно то не очень...
в поисках ответа на на свой вопрос лазил по докам mysql и обращал внимание на count(*) только что то не разобрался с ним (( при манипуляциях с  countом у меня все время вылезало у каждого пользователя одна и таже цифра... или пользователи дублировались и выводился у каждого номер автора вместо кол-ва
Название: Вывод данных из двух таблиц
Отправлено: Меняздесьдавнонет от 02 Марта 2005, 17:54:17
для начала научись получать количество работ для каждого автора
для этого надо выполнить запрос
select count(w_id) as rabot, w_autor_id FROM Worg GROUP BY w_autor_id
Название: Вывод данных из двух таблиц
Отправлено: Turok от 02 Марта 2005, 18:03:55
прости за глупый вопрос... а за что отвечает (as rabot)?
Название: Вывод данных из двух таблиц
Отправлено: Меняздесьдавнонет от 02 Марта 2005, 18:12:16
эх...
выполни запрос да посмотри массив  со строкой из базы.
Название: Вывод данных из двух таблиц
Отправлено: Turok от 02 Марта 2005, 18:27:20
он мне вывел цифирь 2
похоже что выбрал работы одного автора... там всего три работы 2 одного и 1 другова...
вот как выводил:

function autor_count()
{
$ath2 = mysql_query("select count(w_id) as rabot, w_autor_id FROM Work GROUP BY w_autor_id");
if($ath2)
{
  $ar = mysql_fetch_array($ath2);
  echo $ar[\'rabot\'];
}
else
{
  echo "

Error: ".mysql_error()."

";
  exit();
}
}

-----------------------------------
а как же второй автор? или надо было использовать while?

Название: Вывод данных из двух таблиц
Отправлено: Меняздесьдавнонет от 02 Марта 2005, 18:33:43
ну а ты как думаешь?
Название: Вывод данных из двух таблиц
Отправлено: Turok от 02 Марта 2005, 18:43:52
получается чтобы получить таблицу
Юзер \\ Майл \\ Сайт \\ Кол-во работ

нужно будет два отдельных запроса к базе? или можно както объеденить запросы? мой первый запрос $ath = mysql_query("select * from Autor"); на вывод циклом таблицы юзеров
Название: Вывод данных из двух таблиц
Отправлено: Меняздесьдавнонет от 02 Марта 2005, 18:48:59
можно объединить.
это так и называется - обединение, или JOIN
тебе надо запросить количество работ, и присоединить к нему информацию об авторах.
SELECT count(w_id) as rabot, Autor.* FROM Work, Autor WHERE w_id=w_autor_id GROUP BY w_autor_id
Название: Вывод данных из двух таблиц
Отправлено: Turok от 02 Марта 2005, 18:56:33
с таким селектом почемуто выводит только одного автора с его работами
Название: Вывод данных из двух таблиц
Отправлено: Меняздесьдавнонет от 02 Марта 2005, 19:03:34
ну да, я перепутал названия полей.
Это будет втое домашнее задание.
тебе надо объединить две таблицы по автору.
Название: Вывод данных из двух таблиц
Отправлено: Turok от 02 Марта 2005, 19:04:36
ок =)
завтра буду выполнять )) спасибо
Название: Вывод данных из двух таблиц
Отправлено: Turok от 03 Марта 2005, 10:05:33
autor_id=w_autor_id

Спасибо большое! со связями разобрался =)
Название: Вывод данных из двух таблиц
Отправлено: Turok от 03 Марта 2005, 16:32:57
RomikChef
Привет, а как можно в запрос к БД вставить переменную если это гет переменная?
к примеру надо вывести из таблицы поля из строки с ID который в гет переменной
пытался так "SELECT * FROM Autor WHERE autor_id=\'$id\'"
а выводить некоторые поля при помощи mysql_fetch_array
но не выводит ничего вобще ((
Название: Вывод данных из двух таблиц
Отправлено: Меняздесьдавнонет от 03 Марта 2005, 18:19:40
PHP FAQ: Не передаются переменные! Проблема register_globals (http://phpfaq.ru/globals)
PHP FAQ:  \\"Кавычки \\". Cоставление запросов mysql, слеши, экранирование кавычек. (http://phpfaq.ru/slashes)
Название: Вывод данных из двух таблиц
Отправлено: Turok от 03 Марта 2005, 19:11:31
а если не передавать гет переменную в запросе к БД
можно как нить по этой переменной вызвать из масива строку БД?
Название: Вывод данных из двух таблиц
Отправлено: Меняздесьдавнонет от 03 Марта 2005, 20:42:18
"а если не передавать переменную, то можно ли по этой переменной"
ты сам-то понял, что сказал?
А если у меня не будет денег, то можно ли на эти деньги купить...
Цитировать
вызвать из масива строку БД?

а это заклинание что значит?
Название: Вывод данных из двух таблиц
Отправлено: Turok от 04 Марта 2005, 12:58:12
так Турок же я ))
просто я запутался...
сообщяю что переменная гет, подставляю имя переменной в запрос, получаю ответ в масив... но на страницу ничего не выводится

$_GET[\'id\'];
function autor_info()
{
$select = mysql_query("SELECT * FROM Autor WHERE autor_id=\'$id\'");
if($select)
{
$ar_info = mysql_fetch_array($select);

echo "".$ar_info[\'autor_name\']."
".$ar_info[\'autor_discr\']."
".$ar_info[\'autor_www\']."
";

mysql_free_result($select);
}
else
{
  echo "

Error: ".mysql_error()."

";
  exit();
}
}
может я с масивом что то напутал?

Название: Вывод данных из двух таблиц
Отправлено: Меняздесьдавнонет от 04 Марта 2005, 13:02:57
Цитировать
Turok:
$_GET[\'id\'];

что азначать должна эта гениальная строка?
Название: Вывод данных из двух таблиц
Отправлено: Меняздесьдавнонет от 04 Марта 2005, 13:04:34
Цитировать
подставляю имя переменной в запрос

Ты уверен, что подставил? ТОЧНО уверен? А проверять за тебя кто будет?
Цитировать
получаю ответ в масив..

Ты уверен, что получил? ТОЧНО уверен? А проверять за тебя кто будет?

Дядя с форума?
Название: Вывод данных из двух таблиц
Отправлено: Turok от 04 Марта 2005, 13:09:03
тяк... окончательно запутали
$_GET[\'id\']; - считать переменную $id гет переменной

или второй доллар обязательно должен быть? $_GET[\'$id\'];
Название: Вывод данных из двух таблиц
Отправлено: Turok от 04 Марта 2005, 13:12:27
а подставлял в запрос просто условием autor_id=\'$id\'
а как проверить подставилась или нет я не знаю.. тоже и с масивом... чем должно проверяеться получено ли в масив или нет?
Название: Вывод данных из двух таблиц
Отправлено: Меняздесьдавнонет от 04 Марта 2005, 13:50:15
Цитировать
Turok:
$_GET[\'id\']; - считать переменную $id гет переменной

не понял.
с чего ты взял?
почему именно переменнуд $id считать чему-то равной?
почему не $_GET? или $turok?
если следовать твоей логике, то если написать
\'turok\';
то у тебя в скрипте появится переменная $turok?
Может быть, если ты хочешь какой либо переменной присвоить какое-то значение, то это надо делать обычным способом?


Цитировать
Turok:
а как проверить подставилась или нет я не знаю

прошу прочитать, очень внимательно, вот этот текстPHP FAQ: Ничего не работает! Что делать??? (http://phpfaq.ru/debug)
Название: Вывод данных из двух таблиц
Отправлено: Turok от 05 Марта 2005, 10:52:19
Пасиба...
сделал так     $id="".$_GET["id"];
все работает

один вопрос... я правильно установил тип переменной?
$id=(int)$id;
также при выводе функции использую if ($id>0)
я расчитываю так... чтоб небыло возможности подставить в ид другие символы, или надо по другому... проверять переменную и вырезать лишнее?
Название: Вывод данных из двух таблиц
Отправлено: Меняздесьдавнонет от 05 Марта 2005, 11:44:46
правильно.
Цитировать
Turok:
также при выводе функции использую if ($id>0)

вот это не понял.
какой функции? зачем эта проверка?
Цитировать
Turok:
я расчитываю так... чтоб небыло возможности подставить в ид другие символы, или надо по другому... проверять переменную и вырезать лишнее?

если это у тебя числовой параметр, то насильное приведение типа к числу - достаточно.
А вообще, для подстановки в запрос ничего никогда вырезать не надо. Достаточно соблюдать правила составления запросов - PHP FAQ:  \\"Кавычки \\". Cоставление запросов mysql, слеши, экранирование кавычек. (http://phpfaq.ru/slashes)
Название: Вывод данных из двух таблиц
Отправлено: Turok от 05 Марта 2005, 12:31:10

if ($id>0)
{
autor_info();
}
else {
autor_show();
}
вот так я вывожу если в урле есть ид с числом вывожу инфо а если нет то шоу

но судя по твоим словам что достаточно приводить тип к числу ($id=(int)$id;)
я поменял if ($id>0) на if ($id)
Если я правильно понял....