Модераторы: skyboy

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> выборка из двух таблиц 
V
    Опции темы
Gold Dragon
  Дата 13.7.2006, 20:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

Репутация: 2
Всего: 71



Существует несколько таблицы, к примеру

таблица main
id
name
index

таблица comment
id
id_kabak
index

вот запрос где $filtr это дополнительное условие

Код

"SELECT `id` FROM `main` WHERE `index`=1 ".$filtr." ORDER BY `name`";


как мне выбрать все записи из таблицы main при условии что с таблице comment в id_kabak нет соответствий id из main (или только те которые есть) 


--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
Burrr
Дата 13.7.2006, 20:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 459
Регистрация: 4.9.2005

Репутация: нет
Всего: 20



Код

SELECT main.id, main.name, main.index FROM main, comment WHERE main.id != comment.id_kabak ORDER BY main.name;

?  

Это сообщение отредактировал(а) Burrr - 13.7.2006, 20:29


--------------------
PM MAIL ICQ   Вверх
DeadSoul
Дата 13.7.2006, 20:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1217
Регистрация: 25.9.2005
Где: Москва

Репутация: 2
Всего: 11



Burrr, фигню сморозил. У тебя декартево произведение таблиц получится с некоторым фильтром.

Код

SELECT * FROM main WHERE id not in (SELECT id_kabak FROM comments )
 


--------------------
 Если Вы получили ответ на Ваш вопрос, то нажмите на "Вопрос решен". 

Бьем спамеров их же оружием. Пусть весь спам сыпется им
[email protected] 
PM   Вверх
Burrr
Дата 13.7.2006, 20:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 459
Регистрация: 4.9.2005

Репутация: нет
Всего: 20



DeadSoul, насчет декартовог произведения это ты лихо ввернул.
То что я написал нвзывается как и сабж "выборка из двух таблиц" smile 


--------------------
PM MAIL ICQ   Вверх
Gold Dragon
Дата 13.7.2006, 20:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

Репутация: 2
Всего: 71



Burrr,  да в этом то и проблема... я и сам так делаю, но мне выдаёт не по одной записи, а по одиннацать (это столько записей в таблице comment)

вот мой код ($_GET['kod'] - это признак (есть или нет))
Код

...
        if (isset($_GET['kod'])){
            $kod = $_GET['kod'];
            if($kod==1){
                $filtr = "AND main.id!=comment.id_kabak";
         }else {
                $filtr = "AND main.id=comment.id_kabak";
         }
        }else{
            $filtr = '';
        }
...
$z = "SELECT main.id FROM main, comment WHERE main.index=1 ".$filtr." ORDER BY main.name";
$r = mysql_query($z);
...

прикрепляю дамп MySQL

Добавлено @ 20:57 
DeadSoul, сейчас посмотрю твой пример 

Это сообщение отредактировал(а) Gold Dragon - 13.7.2006, 20:56

Присоединённый файл ( Кол-во скачиваний: 0 )
Присоединённый файл  kabak.sql.zip 1,62 Kb


--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
DeadSoul
Дата 13.7.2006, 20:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1217
Регистрация: 25.9.2005
Где: Москва

Репутация: 2
Всего: 11



Цитата(Burrr @  13.7.2006,  20:53 Найти цитируемый пост)
DeadSoul, насчет декартовог произведения это ты лихо ввернул.

Тебе незнаком этот термин?

Цитата(Burrr @  13.7.2006,  20:53 Найти цитируемый пост)
То что я написал нвзывается как и сабж "выборка из двух таблиц"   

Ты только заголовок темы читал или сам первый пост тоже?


Gold Dragon, чем мой запрос не подходит? 


--------------------
 Если Вы получили ответ на Ваш вопрос, то нажмите на "Вопрос решен". 

Бьем спамеров их же оружием. Пусть весь спам сыпется им
[email protected] 
PM   Вверх
Gold Dragon
Дата 13.7.2006, 21:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

Репутация: 2
Всего: 71



DeadSoul, всё равно что-то не катит, не делает по одной выборке

Код

        if (isset($_GET['kod'])){
            $kod = $_GET['kod'];
            if($kod==1){
                $filtr = "AND id NOT IN (SELECT id_kabak FROM comment) ";
         }else {
                $filtr = "AND id IN (SELECT id_kabak FROM comment) ";
         }
        }else{
            $filtr = '';
        }



Добавлено @ 21:07 

DeadSoul, должно получиться по одной записи из main, а он дублирует их по 11 штук, т.е. столько сколько записей в comment 


--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
DeadSoul
Дата 13.7.2006, 21:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1217
Регистрация: 25.9.2005
Где: Москва

Репутация: 2
Всего: 11



Цитата(Gold Dragon @  13.7.2006,  21:04 Найти цитируемый пост)
DeadSoul, должно получиться по одной записи из main, а он дублирует их по 11 штук, т.е. столько сколько записей в comment  

Прямо мой запрос такого выдать не может 


--------------------
 Если Вы получили ответ на Ваш вопрос, то нажмите на "Вопрос решен". 

Бьем спамеров их же оружием. Пусть весь спам сыпется им
[email protected] 
PM   Вверх
Gold Dragon
Дата 13.7.2006, 21:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

Репутация: 2
Всего: 71



вот весь код страницы
Код

<?php
//********************************************************
// входные данные
// index = 0 или нет - весь список по алфавиту
// index = 1 + alfa - фильтрация по первой букве
// index = 2 + kod - фильтр по описаниям (kod=1 - есть, 0 - нет)
// index = 3 + kod - фильтр по комментариям (kod=1 - есть, 0 - нет)
// index = 4 + kod - фильтр по новостям (kod=1 - есть, 0 - нет)
// index = 5 + kod - фильтр по вакансиям (kod=1 - есть, 0 - нет)
//********************************************************

$index = (isset($_GET['index'])) ? $index = $_GET['index'] : 0;
switch ($index) {
    case 3:
        if (isset($_GET['kod'])){
            $kod = $_GET['kod'];
            if($kod==1){
                $filtr = "AND id NOT IN (SELECT id_kabak FROM comment) ";
         }else {
                $filtr = "AND id IN (SELECT id_kabak FROM comment) ";
         }
        }else{
            $filtr = '';
        }
        break;
    case 2:
        if (isset($_GET['kod'])){
            $kod = $_GET['kod'];
            if($kod==1){
                $filtr = "AND `dom`!=0";
         }else {
                $filtr = "AND `dom`=0";
         }
        }else{
            $filtr = '';
        }
        break;
    case 1:
        if (isset($_GET['alfa'])){
            $alfa = $_GET['alfa'];
            if($alfa!=1){
                $filtr = "AND LEFT(name,1)='".$alfa."'";
         }else {
                $filtr = "AND INSTR('цукенгшщзхфвапролджэячсмитбюёЦУКЕНГШЩЗХФВАПРОЛДЖЭЯЧСМИТБЮ',LEFT(`name`,1))=0";
         }
        }else{
            $filtr = '';
        }
        break;
    default:
        $filtr = '';
}


$z = "SELECT main.id FROM main, comment WHERE main.index=1 ".$filtr." ORDER BY main.name";
$r = mysql_query($z);
if(mysql_num_rows($r)>0){
    for($i=0; $i<mysql_num_rows($r); $i++){
        $f = mysql_fetch_array($r);
        $info[$i] = f_info_kabak($f['id']);
    }
    $info_kabak = '';
    for($i=0; $i<count($info); $i++){
        $info_kabak .= s_index2_info_min($info[$i]);
    }
    $content = s_index2_info($info_kabak);
}else{
    $content = s_index2_info(s_index2_err());
}

echo skin('images/p_menu06.gif',$content);


function f_index2_alfa($alfa){
//*************************************************************************
//выбор поалфавитно
//*************************************************************************
}

function s_index2_info($info_kabak){
//******************************************************************
// функция для вывода краткой информации о кабаках в таблицу
//******************************************************************
return <<<EOF
<div align="center">
      <a class='snos1' href='index.php?pages=index2&index=0'>Все</a><br>
      <a class='snos1' href='index.php?pages=index2&index=1&alfa=а'>А</a>
      <a class='snos1' href='index.php?pages=index2&index=1&alfa=б'>Б</a>
      <a class='snos1' href='index.php?pages=index2&index=1&alfa=в'>В</a>
      <a class='snos1' href='index.php?pages=index2&index=1&alfa=г'>Г</a>
      <a class='snos1' href='index.php?pages=index2&index=1&alfa=д'>Д</a>
      <a class='snos1' href='index.php?pages=index2&index=1&alfa=е'>Е</a>
      <a class='snos1' href='index.php?pages=index2&index=1&alfa=ё'>Ё</a>
      <a class='snos1' href='index.php?pages=index2&index=1&alfa=ж'>Ж</a>
      <a class='snos1' href='index.php?pages=index2&index=1&alfa=з'>З</a>
      <a class='snos1' href='index.php?pages=index2&index=1&alfa=и'>И</a>
      <a class='snos1' href='index.php?pages=index2&index=1&alfa=к'>К</a>
      <a class='snos1' href='index.php?pages=index2&index=1&alfa=л'>Л</a>
      <a class='snos1' href='index.php?pages=index2&index=1&alfa=м'>М</a>
      <a class='snos1' href='index.php?pages=index2&index=1&alfa=н'>Н</a>
      <a class='snos1' href='index.php?pages=index2&index=1&alfa=о'>О</a>
      <a class='snos1' href='index.php?pages=index2&index=1&alfa=п'>П</a>
      <a class='snos1' href='index.php?pages=index2&index=1&alfa=р'>Р</a>
      <a class='snos1' href='index.php?pages=index2&index=1&alfa=с'>С</a>
      <a class='snos1' href='index.php?pages=index2&index=1&alfa=т'>Т</a>
      <a class='snos1' href='index.php?pages=index2&index=1&alfa=у'>У</a>
      <a class='snos1' href='index.php?pages=index2&index=1&alfa=ф'>Ф</a>
      <a class='snos1' href='index.php?pages=index2&index=1&alfa=х'>Х</a>
      <a class='snos1' href='index.php?pages=index2&index=1&alfa=ц'>Ц</a>
      <a class='snos1' href='index.php?pages=index2&index=1&alfa=ч'>Ч</a>
      <a class='snos1' href='index.php?pages=index2&index=1&alfa=ш'>Ш</a>
      <a class='snos1' href='index.php?pages=index2&index=1&alfa=щ'>Щ</a>
      <a class='snos1' href='index.php?pages=index2&index=1&alfa=э'>Э</a>
      <a class='snos1' href='index.php?pages=index2&index=1&alfa=ю'>Ю</a>
      <a class='snos1' href='index.php?pages=index2&index=1&alfa=я'>Я</a>
      <a class='snos1' href='index.php?pages=index2&index=1&alfa=1'>Иное</a>
</div>
<p>
<table width="100%" align="center" border="0">
    <tr class="txt8" align="center">
        <td class="btr">
            Описание<br>
            <a class='snos1' href='index.php?pages=index2&index=2&kod=1'>есть</a>&nbsp;&nbsp;<a class='snos1' href='index.php?pages=index2&index=2&kod=0'>нет</a>
        </td>
        <td class="btr">
            Комментарии<br>
            <a class='snos1' href='index.php?pages=index2&index=2&kod=1'>есть</a>&nbsp;&nbsp;<a class='snos1' href='index.php?pages=index2&index=3&kod=0'>нет</a>
        </td>
        <td class="btr">
            Новости<br>
            <a class='snos1' href='index.php?pages=index2&index=2&kod=1'>есть</a>&nbsp;&nbsp;<a class='snos1' href='index.php?pages=index2&index=4&kod=0'>нет</a>
        </td>
        <td class="btr">
            Вакансии<br>
            <a class='snos1' href='index.php?pages=index2&index=2&kod=1'>есть</a>&nbsp;&nbsp;<a class='snos1' href='index.php?pages=index2&index=5&kod=0'>нет</a>
        </td>
    </tr>
</table>
<p>
<table width="100%" class="btr" align="center" border="0">
    <tr align='center'>
        <td class='txt10'>Название</td>
        <td class='txt10'>Описание</td>
        <td class='txt10'>Комментариев</td>
        <td class='txt10'>Новостей</td>
        <td class='txt10'>Вакансий</td>
        <td class='txt10'>Оценка</td>
    </tr>
    {$info_kabak}
</table>
<p align="center"><a class="snos1" href="index.php?pages=otz"><img src="images/b_add1.gif" alt="Оставить отзыв" border="0"></a>
EOF;
}

function s_index2_info_min($info){
//******************************************************************
// функция для вывода краткой информации о кабакt (строка)
//******************************************************************
    return <<<EOF

                <tr class='txt4' align='center'>
                    <td class="btr">&laquo;{$info['name']}&raquo;<br><i>{$info['street']}</i></td>
                  <td class="btr"><b>{$info['dom']}</b></td>
                    <td class="btr"><b>{$info['comment']}</b></td>
                    <td class="btr"><b>{$info['news']}</b></td>
                    <td class="btr"><b>{$info['job']}</b></td>
                    <td class="btr"><b>{$info['bal']}</b></td>
                </tr>
EOF;
}

function s_index2_err(){
return <<<EOF
        <tr valign="top">
                <td class="txt3" colspan="6"><p>&nbsp;</p>Данные отсутствуют<p>&nbsp;</p></td>
        </tr>
EOF;
}
?>


echo skin('images/p_menu06.gif',$content); - здесь просто полученная страница вставляется в шаблон 


--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
cyberface
Дата 13.7.2006, 21:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 41
Регистрация: 6.6.2006

Репутация: 1
Всего: 5



Код

SELECT DISTINCT * FROM main WHERE id not in (SELECT id_kabak FROM comments )
 
PM MAIL   Вверх
Gold Dragon
Дата 13.7.2006, 21:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

Репутация: 2
Всего: 71



cyberface, согласен smile но блин запрос не корректно выполняется.... (если в comment нет, то нормально, а если есть , то что-то всё подряд даёт)


ЗЫ
всё, пошёл спать... завтра буду думать,... а может кто ошибку найдёт
  

Это сообщение отредактировал(а) Gold Dragon - 13.7.2006, 21:43


--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
DeadSoul
Дата 13.7.2006, 21:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1217
Регистрация: 25.9.2005
Где: Москва

Репутация: 2
Всего: 11



Цитата(cyberface @  13.7.2006,  21:16 Найти цитируемый пост)
DISTINCT *

Я такого синтаксиса еще не встречалsmile


Gold Dragon, мой запрос из третьего поста не может плодить записи из-за кол-ва записей в таблице comments 


--------------------
 Если Вы получили ответ на Ваш вопрос, то нажмите на "Вопрос решен". 

Бьем спамеров их же оружием. Пусть весь спам сыпется им
[email protected] 
PM   Вверх
Gold Dragon
Дата 13.7.2006, 21:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

Репутация: 2
Всего: 71



DeadSoul, ну так я дамп и код дал... посмотри сам... у меня что-то не получается


кстати, DISTINCT нафиг не нужен, в main записи не могут повторяться 


--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
DeadSoul
Дата 13.7.2006, 21:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1217
Регистрация: 25.9.2005
Где: Москва

Репутация: 2
Всего: 11



Gold Dragon, php-я пас 


--------------------
 Если Вы получили ответ на Ваш вопрос, то нажмите на "Вопрос решен". 

Бьем спамеров их же оружием. Пусть весь спам сыпется им
[email protected] 
PM   Вверх
Gold Dragon
Дата 13.7.2006, 21:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

Репутация: 2
Всего: 71



DeadSoul,  smile 
хоть запросы посмотри в моём коде, может и правда где ошибся 


--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MySQL | Следующая тема »


 




[ Время генерации скрипта: 0.0603 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.