[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: цикл тройной запрос ошибко
IHD
Вобщем изучаю пхп + mysql делая свой проект.
Вылезла ошибка с нум роус почему понять не могу запрос вроде правильно сделал

и заодно хочу спросить правильно я справилься с поставленой задачей

нужно вывести топ 5 из таблицы контент с определенным тегом
и вытащить из одной таблицы название контента и из другой никнейм автора и все это запихать в ссылку.
Ссылку еще не доделал так как пока не определился как правильно перегонять глобальную переменную


ошибка
Цитата

mysql_num_rows() expects parameter 1 to be resource, array given in



function ZgetTopContent($auto_tag_type, $how_mutch_top="5"){
$query = mysql_query("SELECT `auto_tag_id`,`auto_tag`
FROM `Auto_Tag`
WHERE `auto_tag_id` =
$auto_tag_type LIMIT 1");
$query=mysql_fetch_assoc($query);
echo "<div class='tcclass'>\n
<h4>Топ $how_mutch_top $query[auto_tag]</h4>\n
<ul class='top5 zstyle'>\n";
unset($query);

$query=mysql_query("SELECT `content_rating`,`content_id`,`content_name`,`content_autor_id`
FROM `Content`
ORDER BY `Content`.`content_rating` DESC
LIMIT
$how_mutch_top");
for ($i=0;$i<mysql_num_rows($query);$i++){
$query=mysql_fetch_assoc($query);

$query_autor=mysql_query("SELECT `profile_id`,`profile_nickname`
FROM `Profile`
WHERE `profile_id` =
$query[content_autor_id] LIMIT 1");
$query_autor=mysql_fetch_assoc($query_autor);
echo" <li><a href='$query[content_id]'>$query[content_name]<span>$query_autor[profile_nickname]</span></a>\n";
}
echo " </ul>\n
</div>\n";
};

Большое спасибо !



Спустя 17 минут, 53 секунды (27.08.2012 - 23:35) inpost написал(а):
mysql_query("тут запрос") or die(mysql_error());

Спустя 28 минут, 10 секунд (28.08.2012 - 00:03) IHD написал(а):
Цитата (inpost @ 27.08.2012 - 21:35)
mysql_query("тут запрос") or die(mysql_error());

ошибок ор дай мне ни выводит массив создается вытаскивается только первая строчка проблема в цикле или нум роус

Спустя 11 минут, 28 секунд (28.08.2012 - 00:14) sergeiss написал(а):
Ничего удивительного, что у тебя ошибки :) Ты переменную $query переобъявляешь (переиспользуешь) в разных местах. Оставь ее в одном месте, а в других объяви другую переменную. Я надеюсь, у тебя хватит фантазии на какое-то новое имя для переменной? ;)

И еще - лучше вообще без цикла обойтись. Для этого надо сделать только один запрос к БД, но более "правильный", чем ты делаешь сейчас. Чтобы получить сразу все нужные данные.

PS. И ту же хрень делаешь с $query_author.
Кто, вообще, "научил" тебя так писать?
 $query=mysql_fetch_assoc($query);
$query_author=mysql_fetch_assoc($query_author);

Если сам так решил сделать, то побейся об стену и напиши правильно :) А если кто-то научил, то дай ему по бестолковке.

Спустя 6 часов, 5 минут, 32 секунды (28.08.2012 - 06:20) IHD написал(а):
Цитата (sergeiss @ 27.08.2012 - 22:14)
Ничего удивительного, что у тебя ошибки :) Ты переменную $query переобъявляешь (переиспользуешь) в разных местах. Оставь ее в одном месте, а в других объяви другую переменную. Я надеюсь, у тебя хватит фантазии на какое-то новое имя для переменной? ;)

И еще - лучше вообще без цикла обойтись. Для этого надо сделать только один запрос к БД, но более "правильный", чем ты делаешь сейчас. Чтобы получить сразу все нужные данные.

PS. И ту же хрень делаешь с $query_author.
Кто, вообще, "научил" тебя так писать?
 $query=mysql_fetch_assoc($query);
$query_author=mysql_fetch_assoc($query_author);

Если сам так решил сделать, то побейся об стену и напиши правильно :)  А если кто-то научил, то дай ему по бестолковке.

Я не вижу смысла плодить переменные если действия делаются поочередно
кюери прихал в кюери пихал по тойже причине
но чтото неподумал что нум роус не будет работать после фетчь ассоц
добавление $result проблему решила
как вывести имя автора без цикла не придумал

Спустя 3 часа, 53 минуты, 14 секунд (28.08.2012 - 10:13) sergeiss написал(а):
Цитата (IHD @ 28.08.2012 - 08:20)
Я не вижу смысла плодить переменные если действия делаются поочередно

Тогда не задавай вопросы, почему у тебя ничего не работает. ОК?

Вот смотри. Ты задал вопрос. Я тебе прямо указал, в чем у тебя проблема. А ты упорно держишься за свой код, типа того, что он тебе нравится. Вопрос: а нахрена ты тогда пришел на форум и вопросы задаешь? Ну нравится тебе использовать одну и ту же переменную везде, чтобы "не плодить их", ну и используй тогда одну и ту же везде ;) Перепиши свой код вот так, и "будет тебе счастье":

$query=mysql_query("SELECT `content_rating`,`content_id`,`content_name`,`content_autor_id`  
FROM `Content`
ORDER BY `Content`.`content_rating` DESC
LIMIT
$how_mutch_top");
for ($query=0;$query<mysql_num_rows($query);$query++){
$query=mysql_fetch_assoc($query);

$query=mysql_query("SELECT `profile_id`,`profile_nickname`
FROM `Profile`
WHERE `profile_id` =
$query[content_autor_id] LIMIT 1");
$query=mysql_fetch_assoc($query);
echo" <li><a href='$query[content_id]'>$query[content_name]<span>$query[profile_nickname]</span></a>\n";
}


НО НЕ СПРАШИВАЙ, ПОЧЕМУ ЭТОТ КОД НЕ РАБОТАЕТ!!! Зато он написан в ТВОЕМ любимом стиле :)

Спустя 58 минут, 51 секунда (28.08.2012 - 11:12) IHD написал(а):
Цитата (sergeiss @ 28.08.2012 - 08:13)
Цитата (IHD @ 28.08.2012 - 08:20)
Я не вижу смысла плодить переменные если действия делаются поочередно

Тогда не задавай вопросы, почему у тебя ничего не работает. ОК?

Вот смотри. Ты задал вопрос. Я тебе прямо указал, в чем у тебя проблема. А ты упорно держишься за свой код, типа того, что он тебе нравится. Вопрос: а нахрена ты тогда пришел на форум и вопросы задаешь? Ну нравится тебе использовать одну и ту же переменную везде, чтобы "не плодить их", ну и используй тогда одну и ту же везде ;) Перепиши свой код вот так, и "будет тебе счастье":

$query=mysql_query("SELECT `content_rating`,`content_id`,`content_name`,`content_autor_id`  
FROM `Content`
ORDER BY `Content`.`content_rating` DESC
LIMIT
$how_mutch_top");
for ($query=0;$query<mysql_num_rows($query);$query++){
$query=mysql_fetch_assoc($query);

$query=mysql_query("SELECT `profile_id`,`profile_nickname`
FROM `Profile`
WHERE `profile_id` =
$query[content_autor_id] LIMIT 1");
$query=mysql_fetch_assoc($query);
echo" <li><a href='$query[content_id]'>$query[content_name]<span>$query[profile_nickname]</span></a>\n";
}


НО НЕ СПРАШИВАЙ, ПОЧЕМУ ЭТОТ КОД НЕ РАБОТАЕТ!!! Зато он написан в ТВОЕМ любимом стиле :)

не я твой совет послушал переделал просто не люблю плодить переменные когда зачем сохранять 3 запроса если они тебе непонадобяться


вот сделал без цикла но получилось очень много букаф голова уже не думает пока мозгу сложно воспринимать такую логику


function ZgetTopContent($auto_tag_type, $how_mutch_top="5"){
$query = mysql_query("SELECT `auto_tag_id`,`auto_tag`
FROM `Auto_Tag`
WHERE `auto_tag_id` =
$auto_tag_type LIMIT 1");
$result=mysql_fetch_assoc($query);
echo "<div class='tcclass'>\n
<h4>Топ $how_mutch_top $result[auto_tag]</h4>\n
<ul class='top5 zstyle'>\n";
unset($query);
unset($result);
$query = mysql_query("SELECT `content_rating`,`content_id`,`content_name`,`content_autor_id`
FROM `Content`
ORDER BY `Content`.`content_rating` DESC
LIMIT
$how_mutch_top");

$query_make_up = "SELECT `profile_id`,`profile_nickname`
FROM `Profile`
WHERE"
;
for ($i=0;$i<mysql_num_rows($query);$i++){
$result = mysql_fetch_assoc($query);
$topfive[$i] = $result;// закидываем результаты выборки в массив

$n=$i+1;
if ($n == mysql_num_rows($query))
$query_make_up = $query_make_up . " profile_id =" . $topfive[$i][content_autor_id];
else
$query_make_up = $query_make_up . " profile_id =" . $topfive[$i][content_autor_id]. " OR " ;
};
$query_make_up = mysql_query($query_make_up);
for ($d=0;$d<mysql_num_rows($query_make_up);$d++){
$query_make_up_result = mysql_fetch_assoc($query_make_up);
$topfive_autor[$query_make_up_result[profile_id]] = $query_make_up_result[profile_nickname];
};

for ($i=0;$i<mysql_num_rows($query);$i++){ //вывод масива
echo" <li><a href='".$topfive[$i][content_id]. " '> ".$topfive[$i][content_name]." <span>". $topfive_autor[$topfive[$i][content_autor_id][profile_nickname]] . "</span></a></li>\n";
};

echo " </ul>\n
</div>\n";


вечером посижу подумаю как можно уменьшить кол-во кода буду рад за подсказки

Спустя 10 минут, 23 секунды (28.08.2012 - 11:22) sergeiss написал(а):
Цитата (IHD @ 28.08.2012 - 13:12)
Сделал так вроде работает но чтото очень много букаф


На эту тему я тебе уже давно ответил, в первом же своем ответе этой темы:

Цитата (sergeiss @ 28.08.2012 - 02:14)
И еще - лучше вообще без цикла обойтись. Для этого надо сделать только один запрос к БД, но более "правильный", чем ты делаешь сейчас. Чтобы получить сразу все нужные данные.

Подчеркиваю: " надо сделать только один запрос к БД, но более "правильный", чем ты делаешь сейчас". Еще раз: "только один запрос к БД".

То, как ты сделал, это тоже верно - я имею ввиду саму суть, а не конкретные буковки. Но в идеале надо в БД сделать выборку данных, пусть даже и сложную, а потом максимально простую выборки этих данных в ПХП. Безо всяких вложенных циклов с кучей запросов.

Спустя 34 минуты, 2 секунды (28.08.2012 - 11:56) Guest написал(а):
Ну дык я незнаю как сделать все что мне надо в один запрос поэтому и делаю 3 запроса ни ума не знаний не хватает biggrin.gif поэтому и пишу тут
1 узнаем по какому полю сортируем с одной таблицы
2 вытаскиваем то что сортируем с другой таблицы
3 вытаскиваем пользователей кто их добавлял из 3 ий таблицы

Спустя 4 часа, 24 минуты, 32 секунды (28.08.2012 - 16:21) IHD написал(а):
Во запихал 3 запроса в один

SELECT At.auto_tag_id, At.auto_tag, C.content_rating, C.content_id, C.content_name, C.content_autor_id , P.profile_id , P.profile_nickname
FROM Auto_Tag AS At, Content AS C, Profile AS P
WHERE At.auto_tag_id =1 AND C.content_autor_id= P.profile_id
ORDER BY content_rating DESC
LIMIT
5

Спустя 3 часа, 29 минут, 9 секунд (28.08.2012 - 19:50) IHD написал(а):
Вот такая вот функция вышла

function ZgetTopContent($auto_tag_type, $how_mutch_top="5"){
$query = mysql_query("SELECT At.auto_tag_id, At.auto_tag, C.content_rating, C.content_id,
C.content_name, C.content_autor_id,
P.profile_id , P.profile_nickname
FROM Auto_Tag AS At, Content AS C, Profile AS P
WHERE At.auto_tag_id =
$auto_tag_type AND C.content_autor_id = P.profile_id
ORDER BY content_rating DESC
LIMIT
$how_mutch_top");
echo "<div class='tcclass'>\n";
for ($i=0;$i<mysql_num_rows($query);$i++){
$result=mysql_fetch_assoc($query);
if ($i === 0)
echo "<h4>Топ $how_mutch_top $result[auto_tag]</h4>\n <ul class='top5 zstyle'>\n";
echo "<li><a href=?C=$result[content_id]>$result[content_name]<span>$result[profile_nickname]</span></a>";
};

echo " </ul>\n
</div>\n";
};


Осталось только сделать её универсальной

подскажите пожалуйста как правильней и быстрее считать количество комментариев для вывода топа

вижу 2 варианта

1 считать всю таблицу связей контента с коментами .... думаю это не есть гуд
2 добавить в таблицу контента поле в котором будет делаться +1 при добавлении комментария

подскажите пожалуйста как правильней


Спустя 13 часов, 48 минут, 12 секунд (29.08.2012 - 09:38) sergeiss написал(а):
IHD - вот это уже намного лучше smile.gif

Цитата (IHD @ 28.08.2012 - 21:50)
2 добавить в таблицу контента поле в котором будет делаться +1 при добавлении комментария

подскажите пожалуйста как правильней

Вариант 2 лучше.

И еще. Цикл for() лучше заменить на цикл while()
Цитата (IHD @ 28.08.2012 - 21:50)

// вместо вот этого
for ($i=0;$i<mysql_num_rows($query);$i++){
$result=mysql_fetch_assoc($query);

// лучше сделать так (более универсально, более "красиво"):
while (  $result=mysql_fetch_assoc($query) ) {

Если тебе нужно для первого результата сделать какой-то особый вывод данных, то можно завести отдельную переменную для этого. Но все равно при этом цикл while() надо сохранить.


Спустя 1 день, 4 часа, 13 минут, 54 секунды (30.08.2012 - 13:52) Guest написал(а):
Вот теперь думаю возможно ли все 5ть запросов запихать в один либо 2 -3.
Корочь на странице предпологаеться 5ть выборок по топу в одном месте
1 топ по рейтингу по первому тегу
2 топ по рейтингу 2 ому тегу
3 топ по рейтингу 3 тегу
4 топ по максимальному количеству комментариев
5 вывод 5 ти последних комментариев
Вчера делал форму под выбор ато тегов пока за оптимизацию не отвечаю будет только в хроме отображаться конкретно ссылкоз
сегодня оптимизирую код css и буду дальше пилить точнеее уже из всего собирать что наработал

так вот вопрос можно ли из этих 5ти запросов сделать один или несколько мои знания по sql не могут отетить мне на этот вопрос

Спустя 1 минута, 40 секунд (30.08.2012 - 13:54) IHD написал(а):
это я писал..... Кстате как думаете анимацию лучше по ссылке при наводе на арт сделать веером тоесть обьекты по очереди будут выезжать либо так оставить ?
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.