[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: сложный запрос к БД
m4a1fox
Доброй ночи уважаемые эксперты. Есть вот такой запрос
<?php
$query = mysql_query("SELECT `id`, `id_menu`, `title`, `view`, `date_now`, `view`
FROM `data`
ORDER BY `view`
DESC LIMIT 5"
) or die ("Ошибка -".mysql_error());
while($ind=mysql_fetch_assoc($query))
{
$q = mysql_query("SELECT `id` FROM `menu` WHERE `id` = ".$ind[id_menu]);
$u = mysql_fetch_assoc($q);
echo '
<a href="page_view.php?ind='
.$u['id'].'&view='.$ind['id'].'">
'
.$ind['title'].'.
<br />
<span class="text_left_date">Просморов:'
.(int)$ind['view'].'</span>
-
<span class="text_left_date">'
.$date_add.'</span>
</a>
'
;

Собственно вопрос. Тут давеча узнал, что запрос в цикле не есть good, и решил переделать запрос на объеденяющий. И вот встала задачка. Сам код запроса
<?php
$query = mysql_query("SELECT `data`.`id`, `data`.`id_menu`, `data`.`title`,
`data`.`view`, `data`.`date_now`, `data`.`view`,
`menu`.`id`
FROM `data`, `menu`
WHERE `menu`.`id`=`data`.`id_menu`
ORDER BY `view`
DESC LIMIT 5"
) or die ("Ошибка -".mysql_error());
while($ind=mysql_fetch_assoc($query))
{
echo '
<a href="page_view.php?ind='
.$u['id'].'&view='.$ind['id'].'">
'
.$ind['title'].'.
<br />
<span class="text_left_date">Просморов:'
.(int)$ind['view'].'</span>
-
<span class="text_left_date">'
.$date_add.'</span>
</a>
'
;
}


как мне подставить вот
<a href="page_view.php?ind='.$u['id'].'&view='.$ind['id'].'">
правильную ссылку. Ну что б id из menu и id из data? Надеюсь правильно расписал... если что уточняйте.



Спустя 10 минут, 14 секунд (21.03.2011 - 00:33) kirik написал(а):
Цитата (m4a1fox @ 20.03.2011 - 16:23)
правильную ссылку. Ну что б id из menu и id из data?


SELECT `data`.`id` AS `data_id`, `data`.`id_menu`, `data`.`title`,
`data`.`view`, `data`.`date_now`, `data`.`view`,
`menu`.`id` AS `menu_id`

и соответственно:
'<a href="page_view.php?ind='.$ind['data_id'].'&view='.$ind['menu_id'].'">'

если я всё правильно понял..

Спустя 56 секунд (21.03.2011 - 00:34) inpost написал(а):
SELECT a.`id` AS `id_a`,b.`id` AS `id_b`
from `data` a, `menu` b
как-то так. То есть указать из каких таблиц идёт выбор и в запросе переименовать id на id_a, и id_b (к примеру). И обращаться уже к id_a & id_b

Спустя 38 минут, 27 секунд (21.03.2011 - 01:13) m4a1fox написал(а):
kirik
Да, сработало, благодарю...

Спустя 25 минут, 20 секунд (21.03.2011 - 01:38) m4a1fox написал(а):
Если никто не возражает, я спрошу еще кое что. Как быть с первым запросом, я разобрался... Но вот тут возник еще вопрос. Реально ли уместить вот это
<?php
$query = mysql_query("SELECT `id`, `name` FROM `menu`") or die ("Ошибка -".mysql_error());
while($ind=mysql_fetch_assoc($query))
{
$arch = mysql_query("SELECT `id`
FROM `data`
WHERE `id_menu`='"
.(int)$ind['id']."'
"
) or die ("Ошибка -".mysql_error());
$cnt = mysql_num_rows($arch);
$count_menu = ($cnt == 0) ? NULL: '('.$cnt.')';

echo '
<a href=archive_news.php?ind='
.(int)$ind['id'].'>
'
.$ind['name'].' '.$count_menu.'
</a>
'
;
}

?>

в один запрос. Вот какие у меня попытки были -
<?php
$query = mysql_query("SELECT `menu`.`id` AS `menu_id`, `menu`.`name`,
`data`.`id_menu` AS `data_id_menu`
FROM `menu` LEFT JOIN `data`
ON `menu`.`id`=`data`.`id_menu`
"
) or die ("Ошибка -".mysql_error());
while($ind=mysql_fetch_assoc($query))
{
$arch = mysql_query("SELECT `id`
FROM `data`
WHERE `id_menu`='"
.(int)$ind['menu_id']."'
"
) or die ("Ошибка -".mysql_error());
$cnt = mysql_num_rows($arch);
$count_menu = ($cnt == 0) ? NULL: '('.$cnt.')';

echo '
<a href=archive_news.php?ind='
.(int)$ind['id'].'>
'
.$ind['name'].' '.$count_menu.'
</a>
'
;
}

?>

Спустя 7 минут, 13 секунд (21.03.2011 - 01:45) inpost написал(а):
SELECT a.`id` AS `id_menu`, a.`name`, b.`id` AS `id_data`
FROM `menu` a
LEFT JOIN `data` b ON a.`id`= b.`id_menu`
GROUP BY a.`id`

Спустя 26 минут, 41 секунда (21.03.2011 - 02:12) m4a1fox написал(а):
inpost
Спасибо. Разобрался. Только вот, как подсчитать кол-во? А именно 2 запрос?
$arch = mysql_query("SELECT `id`
FROM `data`
WHERE `id_menu`='"
.(int)$ind['menu_id']."'
"
) or die ("Ошибка -".mysql_error());
$cnt = mysql_num_rows($arch);
$count_menu = ($cnt == 0) ? NULL: '('.$cnt.')';
.

Спустя 6 часов, 32 минуты, 15 секунд (21.03.2011 - 08:44) amazing написал(а):

SELECT a.`id` AS `id_menu`, a.`name`, b.`id` AS `id_data`, COUNT(b.`id`) AS `count_id`
FROM ...

Спустя 4 часа, 8 минут, 59 секунд (21.03.2011 - 12:53) m4a1fox написал(а):
amazing
Спасибо.... помогло. Теперь буду все переделывать:)
Быстрый ответ:

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