-
имеется две таблицы
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 "".$autor[\'autor_name\']." | ".$autor[\'autor_mail\']." |
".$autor[\'autor_www\']." | ".$tut_neznau_chto." |
";
}
echo "
";
}
else
{
echo "Error: ".mysql_error()."
";
exit();
}
------------------------
выводит нормально, НО!!! не могу получить данные в (Кол-во работ)
в таблице Work живут работы юзеров, в поле w_autor_id проставляется autor_id из таблицы Autor
Можно ли вывести все одним селектом? и как тогда переписать массив?
Заранее спасибо за помощь.
-
не массив, наверное, а запрос - ты хотел сказать?
-
упс.. спасибо за поправку =) имелся в виду запрос
-
это не поправка - это вопрос.
Чтобы не гадать, что на самом деле имелось в виду.
знакомы ли тебе такие команды, как join и count?
-
если чесно то не очень...
в поисках ответа на на свой вопрос лазил по докам mysql и обращал внимание на count(*) только что то не разобрался с ним (( при манипуляциях с countом у меня все время вылезало у каждого пользователя одна и таже цифра... или пользователи дублировались и выводился у каждого номер автора вместо кол-ва
-
для начала научись получать количество работ для каждого автора
для этого надо выполнить запрос
select count(w_id) as rabot, w_autor_id FROM Worg GROUP BY w_autor_id
-
прости за глупый вопрос... а за что отвечает (as rabot)?
-
эх...
выполни запрос да посмотри массив со строкой из базы.
-
он мне вывел цифирь 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?
-
ну а ты как думаешь?
-
получается чтобы получить таблицу
Юзер \\ Майл \\ Сайт \\ Кол-во работ
нужно будет два отдельных запроса к базе? или можно както объеденить запросы? мой первый запрос $ath = mysql_query("select * from Autor"); на вывод циклом таблицы юзеров
-
можно объединить.
это так и называется - обединение, или JOIN
тебе надо запросить количество работ, и присоединить к нему информацию об авторах.
SELECT count(w_id) as rabot, Autor.* FROM Work, Autor WHERE w_id=w_autor_id GROUP BY w_autor_id
-
с таким селектом почемуто выводит только одного автора с его работами
-
ну да, я перепутал названия полей.
Это будет втое домашнее задание.
тебе надо объединить две таблицы по автору.
-
ок =)
завтра буду выполнять )) спасибо
-
autor_id=w_autor_id
Спасибо большое! со связями разобрался =)
-
RomikChef
Привет, а как можно в запрос к БД вставить переменную если это гет переменная?
к примеру надо вывести из таблицы поля из строки с ID который в гет переменной
пытался так "SELECT * FROM Autor WHERE autor_id=\'$id\'"
а выводить некоторые поля при помощи mysql_fetch_array
но не выводит ничего вобще ((
-
PHP FAQ: Не передаются переменные! Проблема register_globals (http://phpfaq.ru/globals)
PHP FAQ: \\"Кавычки \\". Cоставление запросов mysql, слеши, экранирование кавычек. (http://phpfaq.ru/slashes)
-
а если не передавать гет переменную в запросе к БД
можно как нить по этой переменной вызвать из масива строку БД?
-
"а если не передавать переменную, то можно ли по этой переменной"
ты сам-то понял, что сказал?
А если у меня не будет денег, то можно ли на эти деньги купить...
вызвать из масива строку БД?
а это заклинание что значит?
-
так Турок же я ))
просто я запутался...
сообщяю что переменная гет, подставляю имя переменной в запрос, получаю ответ в масив... но на страницу ничего не выводится
$_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();
}
}
может я с масивом что то напутал?
-
Turok:
$_GET[\'id\'];
что азначать должна эта гениальная строка?
-
подставляю имя переменной в запрос
Ты уверен, что подставил? ТОЧНО уверен? А проверять за тебя кто будет?
получаю ответ в масив..
Ты уверен, что получил? ТОЧНО уверен? А проверять за тебя кто будет?
Дядя с форума?
-
тяк... окончательно запутали
$_GET[\'id\']; - считать переменную $id гет переменной
или второй доллар обязательно должен быть? $_GET[\'$id\'];
-
а подставлял в запрос просто условием autor_id=\'$id\'
а как проверить подставилась или нет я не знаю.. тоже и с масивом... чем должно проверяеться получено ли в масив или нет?
-
Turok:
$_GET[\'id\']; - считать переменную $id гет переменной
не понял.
с чего ты взял?
почему именно переменнуд $id считать чему-то равной?
почему не $_GET? или $turok?
если следовать твоей логике, то если написать
\'turok\';
то у тебя в скрипте появится переменная $turok?
Может быть, если ты хочешь какой либо переменной присвоить какое-то значение, то это надо делать обычным способом?
Turok:
а как проверить подставилась или нет я не знаю
прошу прочитать, очень внимательно, вот этот текстPHP FAQ: Ничего не работает! Что делать??? (http://phpfaq.ru/debug)
-
Пасиба...
сделал так $id="".$_GET["id"];
все работает
один вопрос... я правильно установил тип переменной?
$id=(int)$id;
также при выводе функции использую if ($id>0)
я расчитываю так... чтоб небыло возможности подставить в ид другие символы, или надо по другому... проверять переменную и вырезать лишнее?
-
правильно.
Turok:
также при выводе функции использую if ($id>0)
вот это не понял.
какой функции? зачем эта проверка?
Turok:
я расчитываю так... чтоб небыло возможности подставить в ид другие символы, или надо по другому... проверять переменную и вырезать лишнее?
если это у тебя числовой параметр, то насильное приведение типа к числу - достаточно.
А вообще, для подстановки в запрос ничего никогда вырезать не надо. Достаточно соблюдать правила составления запросов - PHP FAQ: \\"Кавычки \\". Cоставление запросов mysql, слеши, экранирование кавычек. (http://phpfaq.ru/slashes)
-
if ($id>0)
{
autor_info();
}
else {
autor_show();
}
вот так я вывожу если в урле есть ид с числом вывожу инфо а если нет то шоу
но судя по твоим словам что достаточно приводить тип к числу ($id=(int)$id;)
я поменял if ($id>0) на if ($id)
Если я правильно понял....