Правильно ли сделана выборка из базы ?

ЕСТЬ РЕШЕНИЕ ЗАКРЫТО
#1 12 октября 2011 в 04:08
Осваиваю базу данных..
Бьюсь вторую ночь, сломал всю голову, мозги кипят..
$sql = "SELECT u.userid, u.userlogin, u.usernickname, u.visiting as visiting, p.imageurl, p.user_id
FROM cms_goodboy u
LEFT JOIN cms_user_profiles p ON p.user_id = u.userid
ORDER BY visiting
DESC LIMIT ".$cfg['count'];
Прикрепленный файл
goodboy_e6a2b.jpg 18 Кб
#2 12 октября 2011 в 06:35
простую выборку сделать могу, но мне нужно обьеденение таблиц, вот это у меня не получается, userid, userlogin, usernickname, по большому счету надо выбирать из cms_users, тогда получается что надо еще из третьей таблицы cms_users выбирать эти переменные, а я тупо из второй не могу выбрать. либо синтаксис у меня страдает, либо я чего то не допонимаю.
Прошу помощи…
#3 12 октября 2011 в 08:11
так суть проблемы то в чем? что не работает?
#4 12 октября 2011 в 09:30

так суть проблемы то в чем? что не работает?

Fuze
Уважаемый Fuze, конечно все работает! Мне просто по приколу отнимать свое и Ваше время, а еще мне абсолютно в прикол просить у вас помощи.....
Знал бы по имени, обратился бы....

Да, не работает, поэтому прошу подсказать, что я делаю не так… прошу Вас не стебаться надо мной, так как изучаю PHP кусками по инету…
#5 12 октября 2011 в 10:02

Уважаемый Fuze, конечно все работает! Мне просто по приколу отнимать свое и Ваше время, а еще мне абсолютно в прикол просить у вас помощи.....

Максим Шорин
Да кто стебется то, я спрашиваю ЧТО не работает, запрос нормальный. Ошибка какая или что? Суть вопроса не ясна, перефразируйте, спросите иначе.

p.s. не нужно воспринимать все в штыки, а то при таких реакциях желание помочь пропадет.
#6 12 октября 2011 в 11:41
Максим, я понимаю, что не высыпаешься smile, но Fuze задал абсолютно нормальный вопрос. Информации пусть будет больше, чем меньше. По вопросу не всё ясно. Запрос вроде бы корректен. Что именно не работает? Что хочешь получить?
Из того, что заметил, я бы не стал в таблице cms_goodboy делать лищние колонки userlogin, usernickname. Их можно получить из таблицы cms_users. Для привязки оставил бы только колонку userid. Но это просто замечание и это не влияет на работоспособность запроса.
Нет условия where в запросе. Берете всю таблицу? Попробуй сделать этот запрос в phpmyadmin, подставивь вместо переменных их значения. Или после запроса в файле php вывести массив полученный из таблицы. Только не сам $result, а после обработки fetch_assoc-ом. Примерно так:
  1. print_r($массив);
Получается ли нужный массив?
И конечно же на время отладки нужно включать вывод ошибок мускул и php. И ошибки в студию. Побольше информации.
#7 13 октября 2011 в 13:46
Fuze, сори, действительно мозги зикипели..

Делаю топ по посещениям, за пример взял модуль mod_user_rating, все делаю по аналогии, но не получается..

  1.  
  2. $sql = "SELECT u.userid, u.userlogin, u.usernickname, u.visiting as visiting, p.imageurl, p.user_id
  3. FROM cms_goodboy u
  4. LEFT JOIN cms_user_profiles p ON p.user_id = u.userid
  5. ORDER BY visiting
  6. DESC LIMIT ".$cfg['count'];
  7. $result = $inDB->query($sql);
  8.  
  9. $users = array();
  10. $is_usr = false;
  11.  
  12. if ($inDB->num_rows($result)){
  13.  
  14. $is_usr=true;
  15.  
  16. if (!function_exists('usrImageNOdb')){
  17. include_once($_SERVER['DOCUMENT_ROOT'].'/components/users/includes/usercore.php');
  18. }
  19.  
  20. while($usr = $inDB->fetch_assoc($result)){
  21. $usr['profileurl'] = cmsUser::getProfileURL($usr['userlogin']);
  22. $usr['usrimage'] = usrImageNOdb($usr['userid'], 'small', $usr['imageurl']);
  23. $users[] = $usr;
  24. }
  25. }
  26.  
  27.  
  28. $smarty = $inCore->initSmarty('modules', 'mod_topvisiting.tpl');
  29. $smarty->assign('users', $users);
  30. $smarty->assign('cfg', $cfg);
  31. $smarty->assign('is_usr', $is_usr);
  32. $smarty->display('mod_topvisiting.tpl');
  33.  
  1.  
  2. {if $is_usr}
  3. <table cellspacing="5" border="0" class="mod_user_rating">
  4. <tr>
  5. <td width="20" class="avatar">{$usr.usrimage}</td>
  6. <td width="">
  7. <a href="{$usr.profileurl}" class="nickname">{$usr.usernickname}</a>
  8.  
  9. <div class="rating">{$usr.visiting}</div>
  10. </td>
  11. </tr>
  12. </table>
  13. {else}
  14. <p>Нет данных для отображения.</p>
  15. {/if}
  16.  
  17.  
#8 13 октября 2011 в 14:33
А если вот так?
  1.  
  2. "SELECT u.userid, u.userlogin, u.usernickname, u.visiting as visiting, p.imageurl, p.user_id
  3. FROM cms_goodboy u, cms_user_profiles p
  4. WHERE p.user_id = u.userid
  5. ORDER BY visiting
  6. DESC LIMIT ".$cfg['count'];
  7.  
Извините, если что… когда имел дело с ФоксПро… 3 года имел…
#9 13 октября 2011 в 14:53
Максим Шорин, так и не написал что не получается
#10 13 октября 2011 в 16:13

Максим Шорин, так и не написал что не получается

Администратор
верно, ибо в исходном запросе ошибок вроде нет… тот что я предложил это так...
интригует наверное)
#11 13 октября 2011 в 17:30
не получается то что модуль пустой, тоесть вообще ни чего не показывает..
#12 13 октября 2011 в 19:40
Максим Шорин, в файле шаблона нужно тоже перебирать массив. Ты туда передаешь многомерный массив $users, а в файле шаблона обращаешься к массиву $usr, который является значением многомерного массива. Перебирается как то так:
  1.  
  2. {if $is_usr}
  3. <table cellspacing="5" border="0" class="mod_user_rating">
  4. {foreach key=tid item=usr from=$users}
  5. <tr>
  6. <td width="20" class="avatar">{$usr.usrimage}</td>
  7. <td width="">
  8. <a href="{$usr.profileurl}" class="nickname">{$usr.usernickname}</a>
  9.  
  10. <div class="rating">{$usr.visiting}</div>
  11. </td>
  12. </tr>
  13. {/foreach}
  14. </table>
  15. {else}
  16. <p>Нет данных для отображения.</p>
  17. {/if}
  18.  
#13 13 октября 2011 в 22:26
Марат, огромное спасибо!!!
Всем кто откликнулся тоже спасибо, проблема решена.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.