Задавайте вопросы, мы ответим
Вы не зашли.
Страниц: 1
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>';
}
}
Очень тупо, поэтому хотелось бы это всё по уму в одном запросе, а потом вывести.
Неактивен
Попробуйте
Неактивен
А как же определить ownerid = '$CHISLO'?
Неактивен
Да, моя вина, я сразу не написал об этом. В примере на php только это можно было бы понять. Нужно ещё в выборке учесть, что ownerid = '$CHISLO'
Неактивен
Давайте так - приведите тестовый набор данных (содержимое обеих таблиц) - и желаемый результат от запроса.
Неактивен
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.
Должно быть понятно теперь, я надеюсь.
Неактивен
Неактивен
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';
Спасибо большое!!! Работает как надо. Я бы до такой конструкции точно не додумался бы Это надо быть профессионалом.
Неактивен
Страниц: 1