Нужна помощь, проблема внутри, Php+mysql |
Здравствуйте, гость ( Вход | Регистрация )
Нужна помощь, проблема внутри, Php+mysql |
17.07.2009 - 12:17
Вставить ник | Быстрая цитата | Сообщение
#1
|
|
Частый гость Группа: Участник Сообщений: 141 Регистрация: 18.03.2005 Пользователь №: 7039 |
<H3 minmax_bound="true">Нужна помощь по свзяке php+mysql</H3>Задача такова. Есть 3 таблицы
1. link_id | cat_id 2. cat_id | cat_name 3. link_id | link_name Мне нужно вывести имена категории(cat_name), а под каждом именем категории имена новостей (link_name). Пример: 1)Аэропланы. аэроплан1 аэроплан2 2) Холодильники холодильник1 холодильник 2. Как мне составить запрос? |
|
|
17.07.2009 - 14:18
Вставить ник | Быстрая цитата | Сообщение
#2
|
|
/dev/random Группа: Участник Сообщений: 2216 Регистрация: 5.11.2006 Пользователь №: 16651 |
Немного дурацкий способ:
SQL SELECT t2.cat_id, t2.cat_name, t3.link_name FROM t1 LEFT JOIN t2 USING ( cat_id ) LEFT JOIN t3 USING ( link_id ) ORDER BY t2.cat_id, t3.link_id ASC; Затем на php присвоить $i значение 0 и запустить цикл по всем полученным записям. На каждой итерации проверять равенство $i и текущего t2.cat_id. Если они не равны, выводить заголовок новой категории t2.cat_name и ссылку t3.link_name, а также приравнивать $i к t2.cat_id. Если они равны - то просто выводить t3.link_name. Но здесь проблема будет, если надо это как-нибудь рандомно отсортировать. Впрочем, всю сортировку можно возложить на php... |
|
|
17.07.2009 - 15:05
Вставить ник | Быстрая цитата | Сообщение
#3
|
|
Частый гость Группа: Участник Сообщений: 233 Регистрация: 4.01.2006 Пользователь №: 11329 |
А зачем это делать одним запросом? Категория новостей и новость это разные сущности.
Делай как обычно делают и не заморачивайся не по делу, например так: Код $resCat = mysql_query("SELECT cat_id, cat_name FROM t2");
while ($cat = mysql_fetch_assoc($resCat)) { echo $cat['cat_name']; $resLink = mysql_query("SELECT t3.name FROM t1, t3 WHERE t3.link_id=t1.link_id AND t1.cat_id=$cat[cat_id]"); while ($link = mysql_fetch_assoc($resLink)) { echo $link['link_name']; } } |
|
|
17.07.2009 - 15:59
Вставить ник | Быстрая цитата | Сообщение
#4
|
|
/dev/random Группа: Участник Сообщений: 2216 Регистрация: 5.11.2006 Пользователь №: 16651 |
Ну если у него там 200 категорий, такой метод создаст 201 запрос. Как-то не айс.
|
|
|
17.07.2009 - 16:39
Вставить ник | Быстрая цитата | Сообщение
#5
|
|
Частый гость Группа: Участник Сообщений: 233 Регистрация: 4.01.2006 Пользователь №: 11329 |
Для таких случаев человечество придумало кэш.
|
|
|
17.07.2009 - 21:16
Вставить ник | Быстрая цитата | Сообщение
#6
|
|
Bill rulz ^^ Группа: Участник Сообщений: 1418 Регистрация: 28.09.2003 Пользователь №: 24 |
Не знаю как дела с производительностью на пхп, но вобщем-то можно было бы двумя запросами выбрать
1. категории (2 таблица) 2. новости, заджойненые на маппинг (1 + 3 таблицы) и потом форичем собрать так как хочется. Т.е. то же самое что сказал Bolt Thrower, только заранее вытащить все данные и работать уже без бд. |
|
|
18.07.2009 - 23:57
Вставить ник | Быстрая цитата | Сообщение
#7
|
|
Частый гость Группа: Участник Сообщений: 141 Регистрация: 18.03.2005 Пользователь №: 7039 |
спасибо что откликнулись благо дошел сам, использовал метод креона, тупо обьединил таблицы.
|
|
|
Текстовая версия | Сейчас: 25.04.2024 - 17:00 |