Выбока из двух таблиц, как сгрупировать?

12
seosniks
На сайте с 13.08.2007
Offline
389
1135

Добрый день уважаемые форумчане.

Подскажите как вывести все данные из двух таблиц

Итак в базе есть таблица категори и таблица новости

Мне надо при вызове таблицы новости, получить все значения из таблицы категории

надо их загнать в select

<select name="category">

<option value="1">КИНО</option></select>

<option value="2">Вино</option></select>

<option value="3">Пиво</option></select>

код который выбирает новость

$sql = mysql_query("SELECT news FROM news where id=".$id."");

if(mysql_num_rows($sql) >0) {

while($r=mysql_fetch_array($sql)) {

Тут надо вывести все значения select

}}

Одну категорию получить не проблема.

Потому как новость выбирается всего одна where id=".$id.

Не хочеться делать второго запроса вбазу на выборку значений з таблицы категории.

Спасибо.

C
На сайте с 04.02.2005
Offline
291
#1
Не хочеться делать второго запроса вбазу на выборку значений з таблицы категории.

А почему не хочется, или вера не позволяет??

izbushka
На сайте с 08.06.2007
Offline
110
#2

Т.к. вы выбираете новость по id то, надо полагать, вы ожидаете всего одну строку. В таком случае нет смысла в цикле while($r=mysql_fetch_array($sql)).

Опять же, если вы там ожидаете одну строку, то как вы хотите получить все категории в том запросе? Можно конечно сделать вложенный типа:

select news, (select group_concat(categories) from categories..) as cat from news..

Но это извращение и вам придется парсить результат.

В данном случае лучше сделать 2-мя запросами

ValdisRu
На сайте с 02.10.2006
Offline
139
#3

запрос

$sql = mysql_query("SELECT news, category_id, category_name FROM news, category where id='".$id."'");

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

но это имхо извращение, надо делать двумя разными запросами

и кстати не забывайте заключать переменную в кавычки (я попытался выделить красным) так переменная $id в умелых руках может быть совсем и не числом - про sql инъекции почитайте обязательно

Обалденный заработок на социальных сетях (https://goo.gl/Qtsq6M)
izbushka
На сайте с 08.06.2007
Offline
110
#4
ValdisRu:
и кстати не забывайте заключать переменную в кавычки

Лучше таки перейти на использование PDO и юзать плейсхолдеры.

VHS-1980
На сайте с 21.05.2010
Offline
91
#5

Именно в данной ситуации лучше сделать 2 запроса. Конечно все зависит от данных, от их объема и т.п., но лучше два быстрых запроса, чем один медленный.

KS
На сайте с 11.06.2012
Offline
17
#6
seosniks:
Мне надо при вызове таблицы новости, получить все значения из таблицы категории

Хочу попросить автора, или кого-то из ответивших, если не трудно, объяснить мне суть вопроса.

Хочется предположить, что новости, в таблице новостей, распределены по категориям (новости про кино, про вино, и про пиво). Для этого в таблице новостей очевидно имеется внешний ключ, типа category_id. И требуется сначала показать <SELECT>, состоящий из названий категорий (кино, вино, пиво), а затем, когда посетитель выберет нужную категорию, показать ему новости, относящиеся к этой категории. Вопрос в этом?

FileSafe (http://filesafe.anek.ws/) - мониторинг неизменности файлов сайта для защиты от взлома. Для форумчан - первый год бесплатно.
ValdisRu
На сайте с 02.10.2006
Offline
139
#7
KostaShah:
Хочу попросить автора, или кого-то из ответивших, если не трудно, объяснить мне суть вопроса.
Хочется предположить, что новости, в таблице новостей, распределены по категориям (новости про кино, про вино, и про пиво). Для этого в таблице новостей очевидно имеется внешний ключ, типа category_id. И требуется сначала показать <SELECT>, состоящий из названий категорий (кино, вино, пиво), а затем, когда посетитель выберет нужную категорию, показать ему новости, относящиеся к этой категории. Вопрос в этом?

нет, не совсем

в данном случае на странице показывается одна определенная новость и есть еще <SELECT>, состоящий из названий категорий (кино, вино, пиво)

для вывода новости выполняется один запрос к БД

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

но ТС почему то захотел все данные получить одним запросом и интересуется как это сделать (какой запрос должен быть) а все остальные ему советуют так не делать

я предполагаю что ТС думает что если будет один запрос а не два то это будет "экономичнее" чтоли и/или быстрее

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

C
На сайте с 04.02.2005
Offline
291
#8

KostaShah, Вы будете 5-м, кто ждет ответа ТС

ValdisRu
На сайте с 02.10.2006
Offline
139
#9
izbushka:
Лучше таки перейти на использование PDO и юзать плейсхолдеры.

возможно

но если ТС их не юзает, то ему надо хоть как то фильтровать поступающие данные

seosniks
На сайте с 13.08.2007
Offline
389
#10
VHS-1980:
Именно в данной ситуации лучше сделать 2 запроса. Конечно все зависит от данных, от их объема и т.п., но лучше два быстрых запроса, чем один медленный.

Ясно, сделаем 2 запроса.

Просто у меня таких полей несколько, из трех таблиц надо выбрать.

---------- Добавлено 28.12.2012 в 18:38 ----------

Chukcha:
А почему не хочется, или вера не позволяет??

Да нет, просто не хотелось городить кучу запросов к базе.

---------- Добавлено 28.12.2012 в 18:42 ----------

KostaShah:
Хочу попросить автора, или кого-то из ответивших, если не трудно, объяснить мне суть вопроса.
Хочется предположить, что новости, в таблице новостей, распределены по категориям (новости про кино, про вино, и про пиво). Для этого в таблице новостей очевидно имеется внешний ключ, типа category_id. И требуется сначала показать <SELECT>, состоящий из названий категорий (кино, вино, пиво), а затем, когда посетитель выберет нужную категорию, показать ему новости, относящиеся к этой категории. Вопрос в этом?

Мне нужно отредактировать новость.

есть несколько таблиц.

таблица city news kategory

При редактировании селектом мы можем менять город и категорию.

Ну ошиблись при добавлении.

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

Запрос

$sql = mysql_query("SELECT news.*,kategory.* FROM news,kategory where news.kategory=kategory.id and news.id='".$id."'");

Вернет мне ту категорию кторая в news.id='".$id

---------- Добавлено 28.12.2012 в 18:43 ----------

VHS-1980:
Именно в данной ситуации лучше сделать 2 запроса. Конечно все зависит от данных, от их объема и т.п., но лучше два быстрых запроса, чем один медленный.

Пожалуй вы правы, тем более что категорий всего 10 а городов 20.

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий