SQLinfo.ru - Все о MySQL

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

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

Вы не зашли.

#1 28.03.2012 06:15:35

ZloiKombat
Участник
Зарегистрирован: 19.02.2011
Сообщений: 18

Запрос для выборки из 2х таблиц

Здравствуйте!
Помогите пожалуйста составить корректный запрос на выборку из таблицы.
Есть 2 таблицы

Чат
---------------
|имя1|Сообщение|
|-------------|
|Маша|аааааааа|
|Даша|бббббббб|
|Федя|вввввввв|
|Паша|гггггггг|
|Саша|дддддддд|
|Саша|ееееееее|
|    я|жжжжжжжж|
---------------

Друг
-----------------
| Имя|Юзер|номер|
-----------------
|Маша|Коля|1|
|Саша|Паша|1|
|Саша|Коля|2|
|Маша|     я|2|
|Соня|Паша|1|
|    я|Федя|1|
|    я|Маша|2|
|Даша|Маша|1|
---------------

Нужно выбрать все записи из первой таблицы (Чат) кроме тех у которых или которые Я в игноре (Друг номер 2)

В таблице ДРУГ в колонке НОМЕР цифра 1 обозначает в друзьях, цифра 2 в игноре

Пишу чат и хочу сделать что бы если человек меня игнорирует или я его игнорирую что бы мы не видели сообщений друг друга.
Сделал такой код и этот код работает так как нужно, но в нем 2 запроса да и составлен не совсем хорошо, больше на г.код смахивает

$ignor = '';
$sqlign = mysql_query("SELECT `имя`,`юзер` FROM `друг` WHERE `имя` = 'я' AND `номер`='2' OR `юзер` = 'я' AND `номер` = '2';");
while($ignor_arr = mysql_fetch_array($sqlign))
{
    if ($ignor_arr['имя'] != я)
    {
        $vstav = $ignor_arr['имя'];
    }
    elseif ($ignor_arr['юзер'] != я)
    {
        $vstav = $ignor_arr['юзер'];
    }
    if (!empty($ignor))
    {
        $ignor .= ' AND ';
    }
    $ignor .= "`имя1` != '".$vstav."'";
}

$reqi = mysql_query("SELECT * FROM `чат` WHERE ".$ignor." ORDER BY `id` DESC LIMIT ".$start.",".$str.";");

while ($res = mysql_fetch_assoc($reqi))
{
    echo $res['имя1'].'<br />'.$res['сообщение'];
}

Помогите составить 1 нормальный запрос на эту выборку, заранее благодарен

Неактивен

 

#2 28.03.2012 07:25:32

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

Re: Запрос для выборки из 2х таблиц

SELECT .. FROM `чат` left join
(SELECT `юзер` FROM `друг` WHERE `имя` = 'я' AND `номер`='2'
union
SELECT `имя` FROM `друг` WHERE `юзер` = 'я' AND `номер` = '2') t on `имя1`=`имя` where `имя` is null;

Неактивен

 

#3 28.03.2012 11:30:57

ZloiKombat
Участник
Зарегистрирован: 19.02.2011
Сообщений: 18

Re: Запрос для выборки из 2х таблиц

Большое спасибо за помощь, суть запроса я понял, правда не могу заставить его работать(( Уже несколько часов бьюсь над этим запросом, посмотрите пожалуйста может есть какая то неточность в запросе?

Неактивен

 

#4 28.03.2012 12:58:02

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

Re: Запрос для выборки из 2х таблиц

А что значит не могу заставить его работать? Запрос выдаёт ошибку? Если да, то напишите какую. Если выдаёт пустое множество, то приведите дампы Ваших таблиц.


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

Неактивен

 

#5 28.03.2012 13:28:22

ZloiKombat
Участник
Зарегистрирован: 19.02.2011
Сообщений: 18

Re: Запрос для выборки из 2х таблиц

То и значит, запрос пустой, ничего не возвращает

Неактивен

 

#6 28.03.2012 16:41:19

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

Re: Запрос для выборки из 2х таблиц

Тогда дампы таблиц приложите. Ну и сам текст запроса, если меняли, то тоже приведите.


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

Неактивен

 

#7 29.03.2012 12:21:36

ZloiKombat
Участник
Зарегистрирован: 19.02.2011
Сообщений: 18

Re: Запрос для выборки из 2х таблиц

chat1
id    int(11)
login    varchar(20)
nik    varchar(20)
color    varchar(6)
avatar    varchar(100)
pol    char(1)
message    varchar(700)
data_mess    int(11)
privat    int(1)

drug
id    int(11)
nik    varchar(20)
drug    varchar(20)
nomer    int(1)
times    int(10)

$reqi = mysql_query("SELECT * FROM `chat1` LEFT JOIN (SELECT `drug` FROM `drug` WHERE `nik` = '".$mylogin."' AND `nomer`='2' UNION SELECT `nik` FROM `drug` WHERE `drug` = '".$mylogin."' AND `nomer`='2') t ON `login`=`nik` WHERE `login` IS NULL;");

while ($res = mysql_fetch_assoc($reqi))
{

}

Неактивен

 

#8 29.03.2012 15:42:32

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

Re: Запрос для выборки из 2х таблиц

ZloiKombat, приведите дампы таблицы вот в таком или таком виде - то есть create table chat1 и create table drug. И данные в виде insert into chat1 и insert into drug. Без тестовых данных трудно что-то подсказать.
И текст самого запроса (то есть где вместо $mylogin подставлено реальное значение) тоже.


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

Неактивен

 

#9 29.03.2012 15:42:47

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

Re: Запрос для выборки из 2х таблиц

А обработку ошибок кто будет делать?

ON `login`=`nik`
замените на
ON `chat1`.`login`=t.`drug`


И не стоит писать "select *", указывайте явно нужные поля.

Неактивен

 

#10 29.03.2012 21:13:20

ZloiKombat
Участник
Зарегистрирован: 19.02.2011
Сообщений: 18

Re: Запрос для выборки из 2х таблиц

Всем большое спасибо за помощь!
Сработал вот такой запрос

SELECT * FROM `chat1` LEFT JOIN (SELECT `drug` FROM `drug` WHERE `nik` = '".$log."' AND `nomer`='2' UNION SELECT `nik` FROM `drug` WHERE `drug` = '".$log."' AND `nomer`='2') t ON `chat1`.`login` = t.`drug` WHERE t.`drug` IS NULL;

Отредактированно ZloiKombat (29.03.2012 22:18:52)

Неактивен

 

Board footer

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