Забыли пароль?
Запросите новый здесь.

Автор темы: mishqa35
ID темы: 1205
Информация:
Тема содержит 11 сообщения, была просмотрена 2689 раз.  Имеются прикрепленные файлы.
Просмотр темы
PHP-Fusion Russia » Веб-разработка » MySQL
 Распечатать тему
Нужна помощь с запросом
mishqa35
На скриншоте набросал пример таблицы

Возможно ли одним запросов вытащить нужную инфу
Загрузить источник  GeSHi: MySQL
  1. $result = dbquery(
  2. "SELECT nn.*, nc.* FROM ".DB_NEWS." nn
  3. LEFT JOIN ".DB_NEWS_CAT." nc ON nn.cat=nc.id
  4. WHERE id = '1' LIMIT 1"
  5. );
Добавлено за 0.012 секунд, используя GeSHi 1.0.8.10

Данный запрос выведет 1,3
Вот меня интересует возможно ли вывести одним запросом не id категорий а их названия, тоесть не 1,3 а ert,vbn
mishqa35 присоединено следующее:изображение:
89328734867236.png

 
Web
Polarfox
Архитектура хреновая походу... Хранить строкой иды через запятую...

Переделать нельзя?
Всегда делайте backup перед изменениями | Указывайте свою версию в подписи/профиле.
Ежели кто забанен за спам, но не считает себя ботом: можете сообщить мне об этом, все будет хорошо.

PolarLab - вход для подопытных
 
Web
mishqa35
Переделать еще пока можно, но вроде везде делается так, везде где новость имеет более одной категории.
Просто чтобы не делать по лишнему запросу на новость, чтобы узнавать категорию вот ищу нормальное решение. У каждой новости будет по 2-5 категорий, ну и собственно id\name категорий нужно будет узнавать.

Пока придумал лишь одно решение, сделать один запрос в ядре и в масив передать все категории. А далее функцией выводить нужные. Этим я сделаю всего +1 запрос на все новости.

Но все равно хотелось бы узнать мб есть другой способ как это лучше сделать.

Оффтопик забивать в базу к новости id,name|id2,name2 ag

 
Web
Rush
везде где новость имеет больше одной категории, делается через таблицу связей. это many to many.
так делается только во фьюжне, тут много чего через жопу.

по сабже одним запросом никак, если и можно, то это будет запрос в запросе, грубо говоря все равно 2 запроса)
 
Web
Rush
Пока придумал лишь одно решение, сделать один запрос в ядре и в масив передать все категории. А далее функцией выводить нужные. Этим я сделаю всего +1 запрос на все новости.

в данном случае конечно решение, но это плохая практика - держать в памяти данные, которые даже могут не пригодиться
 
Web
mishqa35
Тут больше дело даже не в том что будет по 2 запроса, а в том что на главной странице, где выводятся например 10 новостей, будет 11 запросов только на новости и категории, не щитая по запросу на число комментариев.

По поводу храненья в памяти даже не знаю, но сделать кеш к этому решению будет весьма не плохо. Посмотрю как сделано в других цсм, мб что придет на ум.
 
Web
Rush
mishqa35 написал:

Тут больше дело даже не в том что будет по 2 запроса, а в том что на главной странице, где выводятся например 10 новостей, будет 11 запросов только на новости и категории, не щитая по запросу на число комментариев.

По поводу храненья в памяти даже не знаю, но сделать кеш к этому решению будет весьма не плохо. Посмотрю как сделано в других цсм, мб что придет на ум.

вот комментарии можно элементарно посчитать при выборке новости.
 
Web
mishqa35
Элементарно ;)
Скачать исходники  Код
   $result = dbquery(
      "SELECT tn.*, tc.*, COUNT(cc.comment_id) AS count, tu.user_id, tu.user_name, tu.user_status FROM ".DB_NEWS." tn
      LEFT JOIN ".DB_USERS." tu ON tn.news_name=tu.user_id
      LEFT JOIN ".DB_NEWS_CATS." tc ON tn.news_cat=tc.news_cat_id
      LEFT JOIN ".DB_COMMENTS." cc ON cc.comment_item_id=tn.news_id
      WHERE ".groupaccess('news_visibility')." AND news_id='".$_GET['readmore']."' AND news_draft='0'
      LIMIT 1"
   );




А по теме, хотелось бы все таки узнать как лучше сделать новость с энным кол-вом категорий. Как это все лучше организовать.
 
Web
Rush
лучше не заморачиваться. одим запросом больше, одним меньше. не тот уровень.
SELECT * FROM cats
SELECT * FROM news LIMIT 10
while($cat=mysql_fetch_assoc($cats_result)) {
$cats[$cat['cat_id']] = $cat;
}
while ($news_item=mysql_fetch_assoc($news)) {
foreach (explode(",",$news_item['news_cats']) as $news_cat) {
echo $cats[$news_cat]['cat_title'];
}
}

запроса два. и врядли тут один будет лучше

про many to many почитать можно
http://www.tonyma...-many.html
http://www.askdev...%BA%D0%B0/
 
Web
Rush
не люблю sql...
 
Web
Polarfox
Оффтопик Не люблю двойные посты ae


У нас нет таких связей, есть только группы, права может, но это не совсем связи такого рода.
Всегда делайте backup перед изменениями | Указывайте свою версию в подписи/профиле.
Ежели кто забанен за спам, но не считает себя ботом: можете сообщить мне об этом, все будет хорошо.

PolarLab - вход для подопытных
 
Web

Поделиться этой темой
Социальные закладки: Vkontakte Odnoklassniki Mail.ru Facebook Google Tweet This
URL:
BBcode:
HTML:

Перейти на форум: