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

Форум MySQL

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

 

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

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

тема: Две таблицы запрос
 
 автор: Лена   (18.09.2008 в 15:07)   письмо автору
1.2 Кб
 
 

Есть две таблицы. Прикрепляю дамп. Из каждой таблицы нужно вывести названия разделов.
Если я делаю вот такой запрос:

<?php
include ("configs/dbopen.php");
$query="SELECT id_menu, title, id_mod, name
FROM menu AS m, modules AS n
WHERE n.pid_mod =0"
;
$result mysql_query($query);
if(!
$result) exit() OR mysql_error();
$number mysql_num_rows($result);
if(
$number>0){
    for(
$p 0$row mysql_fetch_assoc($result); ){
    
$menu $row['id_menu'];
    
$name $row['title'];
    
$mod $row['id_mod'];
    
$mod_name $row['name'];    
        if(
$p != $mod){
        echo 
"<strong>" $mod_name "</strong>\r\n";
        
$p $mod;
        }
        echo 
"<hr />" $name "<br />\r\n";
    }
}
?>


Проблема в том, что результате запроса из первой таблицы все нормально выводится, из второй - ряды повторяются, например:
ряды 1 таблицы ряды 2 таблицы
Раздел 1 Главная
Раздел 2 Главная
Раздел 3 Главная
Мне нужно, чтобы названия разделов 2 таблицы (modules) тоже выводились один раз, например:
Главная
Контакты
Архив и т.д.
Сделала условие: $p != $mod, чтобы названия второй таблицы вывелись один раз, но теперь названия первой выводятся помногу.

Таблицы не имеют общих полей. Думаю, что объединить через JOIN нельзя. Может, вообще сделать два разных запроса?

  Ответить  
 
 автор: Trianon   (18.09.2008 в 18:29)   письмо автору
 
   для: Лена   (18.09.2008 в 15:07)
 

Если Вы пришете в разделе FROM несколько таблиц через запятую - нужно указывать условия связывания строк.
Фактически, запятая, которую Вы ставите между именами таблиц, воспринимается точно также как ключевое слово JOIN.

  Ответить  
 
 автор: Лена   (19.09.2008 в 09:25)   письмо автору
 
   для: Trianon   (18.09.2008 в 18:29)
 

Сделала по-другому. Взяла UNION, типы полей только надо смотреть, чтобы одинаковые были в таблицах( id_menu и id_mod у меня цифровые, например)

<?php
include ("configs/dbopen.php");
//вытягиваю из базы все разделы, которые пойдут в субселект
$query="SELECT id_menu, title
FROM menu
UNION 
SELECT id_mod, name
FROM modules
WHERE modules.pid_mod =0
"
;
$result mysql_query($query);
if(!
$result) exit() OR mysql_error();
$number mysql_num_rows($result);
if(
$number>0){
    while(
$row mysql_fetch_array($result)){
    
//print_r($row);
    
$menu $row['id_menu'];
    
$name $row['title'];

    echo 
$name "<br>";
    }
}
echo 
"<hr>";



Непонятно одно: в учебнике пишется, что у столбцов, которые получаются, нет заголовков, но если делать в phpMyAdmin - заголовки для столбцов берутся по названию полей первой таблицы. Выходит, в учебнике ошиблись?

Про FROM не сильно поняла, какие условия? Например?

  Ответить  
 
 автор: Trianon   (19.09.2008 в 20:41)   письмо автору
 
   для: Лена   (19.09.2008 в 09:25)
 

FROM menu, modules

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

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