SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 09.01.2015 02:41:43

Евгений Андреевич
Участник
Зарегистрирован: 18.12.2013
Сообщений: 10

Помогите сделать выборку из 2 таблиц с одинаковыми полями

2 таблицы:
FILES
ZAPISI

В обоих есть поля, которые соответствуют друг другу.
FILEID
ownerid

Но в таблице files могут быть поля, а в ZAPISI нет.

Мне нужно вытащить все те, которых нет в таблице ZAPISI.

Раньше я делал это на php перебором:

$result = mysql_query("select FILEID,filename from FILES where ownerid = '$CHISLO'");
while($results_array = mysql_fetch_array($result)){
    $res_ar = mysql_fetch_array(mysql_query("select count(*) cf FILEID from ZAPISI where fileid='".$results_array['FILEID']."'"));

    if($res_ar['cf']==0){
echo'<option value="'.$results_array['fileid'].'">'.$results_array['filename'].'</option>';
    }

}

Очень тупо, поэтому хотелось бы это всё по уму в одном запросе, а потом вывести.

Неактивен

 

#2 09.01.2015 07:43:50

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: Помогите сделать выборку из 2 таблиц с одинаковыми полями

Попробуйте

SELECT f.* FROM FILES f LEFT JOIN ZAPISI z ON f.owner_id = z.FILEID WHERE z.FILEID IS NULL;


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#3 09.01.2015 11:04:18

Евгений Андреевич
Участник
Зарегистрирован: 18.12.2013
Сообщений: 10

Re: Помогите сделать выборку из 2 таблиц с одинаковыми полями

А как же определить ownerid = '$CHISLO'?

Неактивен

 

#4 09.01.2015 11:06:03

Евгений Андреевич
Участник
Зарегистрирован: 18.12.2013
Сообщений: 10

Re: Помогите сделать выборку из 2 таблиц с одинаковыми полями

Да, моя вина, я сразу не написал об этом. В примере на php только это можно было бы понять. Нужно ещё в выборке учесть, что ownerid = '$CHISLO'

Неактивен

 

#5 09.01.2015 15:30:52

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: Помогите сделать выборку из 2 таблиц с одинаковыми полями

Давайте так - приведите тестовый набор данных (содержимое обеих таблиц) - и желаемый результат от запроса.


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#6 09.01.2015 15:57:23

Евгений Андреевич
Участник
Зарегистрирован: 18.12.2013
Сообщений: 10

Re: Помогите сделать выборку из 2 таблиц с одинаковыми полями

2 таблицы:
FILES - здесь хранятся данные о файлах для записей в таблице ZAPISI
fileid        порядковый номер файла в таблице
filename    имя файла
ownerid    чей файл
size        размер файла
файлов может быть больше, чем записей, т.к. пользователь сначала добавляет файл (в таблицу FILES), а потом при публикации записи (ZAPISI), он использует добавленный ранее файл.

ZAPISI - публикации, которые ОБЯЗАТЕЛЬНО должны иметь файлы из таблицы FILES. Нет такой строки в таблице ZAPISI, у которой нет соответствия в таблице FILES.

zapis_id    порядковый номер трека в таблице
title        название
madeon    дата создания
date            дата публикации
desc         описание
ownerid     чья запись
fileid        id файла
golosa    кол-во голосов
zakachek    кол-во закачек

Задача: нужно вывести все fileid из FILES для определённого пользователя (в первом примере это переменная $CHISLO), которые не участвуют в публикациях из таблицы ZAPISI.

Мой скрипт на php делает:
1. сначала выборку всех FILEID из таблицы FILES, принадлежащих определённому пользователю (where ownerid = '$CHISLO')
$result = mysql_query("select FILEID,filename from FILES where ownerid = '$CHISLO'");

2. Потом циклом ищем в таблице ZAPISI соответствие с FILEID
while($results_array = mysql_fetch_array($result)){
    $res_ar = mysql_fetch_array(mysql_query("select count(*) cf FILEID from ZAPISI where fileid='".$results_array['FILEID']."'"));

3. если не находим
    if($res_ar['cf']==0){

4. то выводим в список
echo'<option value="'.$results_array['fileid'].'">'.$results_array['filename'].'</option>';
    }

}

А хочется в 1 sql-запросе сразу получить все fileid для определённого пользователя, у которых нет соответствий в ZAPISI.

Должно быть понятно теперь, я надеюсь.

Неактивен

 

#7 10.01.2015 16:18:11

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Помогите сделать выборку из 2 таблиц с одинаковыми полями

SELECT f.* FROM FILES f LEFT JOIN ZAPISI z ON f.fileid = z.FILEID WHERE z.FILEID IS NULL AND f.owner_id='$CHISLO';

Неактивен

 

#8 10.01.2015 17:24:10

Евгений Андреевич
Участник
Зарегистрирован: 18.12.2013
Сообщений: 10

Re: Помогите сделать выборку из 2 таблиц с одинаковыми полями

vasya написал:

SELECT f.* FROM FILES f LEFT JOIN ZAPISI z ON f.fileid = z.FILEID WHERE z.FILEID IS NULL AND f.owner_id='$CHISLO';

Спасибо большое!!! Работает как надо. Я бы до такой конструкции точно не додумался бы smile Это надо быть профессионалом.

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson