Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: двухтабличный sql запрос
 
 автор: Bvz   (19.06.2009 в 10:33)   письмо автору
 
 

как правильно сделать выборку и вывод данных
есть тадица 1
id_cat name_cat

и таблица 2
id_ent name_ent id_cat


как правильно сделать выборку и таблицы 2, чтоб при соответствии id_cat выводилось содержимое name_cat

  Ответить  
 
 автор: buldovsky   (19.06.2009 в 11:12)   письмо автору
 
   для: Bvz   (19.06.2009 в 10:33)
 

Своими словами:


<?php

$query 
"SELECT  (здесь через запятую пишете все поля которые должны быть в результате запроса: табл1.поле2, табл2.поле3 и т.д.)
          FROM (название первой таблицы, для всех строк которой нужно найти соответствие во второй таблице)
               LEFT JOIN (название второй таблицы)
               ON (условие по которому определяется соответствие, у вас: 'таблица2.id_cat = таблица1.id_cat' ) "
;

?>


Если вам нужно перебрать не все строки первой таблицы добавьте в конце запроса WHERE или LIMIT...
Можете использовать синонимы имен таблиц и полей с помощью AS
Строк LEFT JOIN ... ON ... в запросе может быть столько, сколько полей из других таблиц необходимо привести в соответствие первой "главной" таблице. В вашем случае одного левого соединения хватит.

  Ответить  
 
 автор: Bvz   (31.07.2009 в 00:23)   письмо автору
 
   для: buldovsky   (19.06.2009 в 11:12)
 

все здорово, разобрался как работает, но есть нюан, в обоих таблицах есть поле с одинаковым названием и выводится только из 2-й таблицы, а как сделать что оба выводились, вот код
$ad = mysql_query("SELECT * FROM ad LEFT JOIN sections ON ad.sections=sections.id ORDER BY ad.id DESC LIMIT $start, $num");
if (mysql_num_rows($ad) == 0)
exit ("в данном разделе нет объявлений!");
while ($ad_ad = mysql_fetch_assoc($ad))
{
$text = $ad_ad['ad'];
$bb = new bbcode($text);



?>
<tbody>
<tr>
<td><?php echo $ad_ad['name']; ?></td>
<td><?php echo $ad_ad['name']; ?></td>
<td><?php echo $bb -> get_html(); ?></td>
<td><?php echo $ad_ad['phone']; ?></td>
<td><?php echo $ad_ad['date']; ?></td>
<td align="center">
<a href="edit_ad.php?id=<?php echo $ad_ad['id']; ?>">
<img src="images/edit.gif" width="24" height="24" border="0" alt="редактировать"/></a>
</td>
<td align="center">
<a href="remove_ad.php?id=<?php echo $ad_ad['id']; ?>" onclick="return confirm('Удалить?');">
<img src="images/remove.gif" width="24" height="24" border="0" alt="удалить" /></a>
</td>
</tr></tbody>
<?php
}


т.е. вот эти два поля из разных талиц, а как их идентифицировать?

<td><?php echo $ad_ad['name']; ?></td>
<td><?php echo $ad_ad['name']; ?></td> 

  Ответить  
 
 автор: Ringo   (31.07.2009 в 09:33)   письмо автору
 
   для: Bvz   (31.07.2009 в 00:23)
 

SELECT
sections .name as sname, sections.phone as sphone, sections.date as sdate,
ad.name as aname, ad.phone as aphone, ad.date as adate,
FROM
ad
LEFT JOIN
sections ON ad.sections=sections.id ORDER BY ad.id DESC LIMIT $start, $num

Как то так. То есть ты определенные поля выбираешь из таблицы и записываешь в другую переменную с помощью AS. На выходе получается две переменные sname - из таблицы sections
и aname - из таблицы ad. Мой запрос скорей всего не верный тк я не вижу твоей структуры таблиц и я вытащил одинаковые данные из двух таблиц. Ну я думаю смысл ты понял, если нет пиши =)

  Ответить  
 
 автор: Bvz   (31.07.2009 в 10:12)   письмо автору
 
   для: Ringo   (31.07.2009 в 09:33)
 

спасибо, вот так работает :)
$sql ="SELECT *, ad.name AS ad_name, sections.name AS sections_name, ad.id AS id_ad FROM ad LEFT JOIN sections ON ad.sections=sections.id ORDER BY ad.id DESC LIMIT ".$start.", ".$num;

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования