![]() |
Задавайте вопросы, мы ответим
Вы не зашли.
Здравствуйте!
Помогите пожалуйста составить корректный запрос на выборку из таблицы.
Есть 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 нормальный запрос на эту выборку, заранее благодарен
Неактивен
Неактивен
Большое спасибо за помощь, суть запроса я понял, правда не могу заставить его работать(( Уже несколько часов бьюсь над этим запросом, посмотрите пожалуйста может есть какая то неточность в запросе?
Неактивен
А что значит не могу заставить его работать? Запрос выдаёт ошибку? Если да, то напишите какую. Если выдаёт пустое множество, то приведите дампы Ваших таблиц.
Неактивен
То и значит, запрос пустой, ничего не возвращает
Неактивен
Тогда дампы таблиц приложите. Ну и сам текст запроса, если меняли, то тоже приведите.
Неактивен
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))
{
}
Неактивен
ZloiKombat, приведите дампы таблицы вот в таком или таком виде - то есть create table chat1 и create table drug. И данные в виде insert into chat1 и insert into drug. Без тестовых данных трудно что-то подсказать.
И текст самого запроса (то есть где вместо $mylogin подставлено реальное значение) тоже.
Неактивен
А обработку ошибок кто будет делать?
ON `login`=`nik`
замените на
ON `chat1`.`login`=t.`drug`
И не стоит писать "select *", указывайте явно нужные поля.
Неактивен
Всем большое спасибо за помощь!
Сработал вот такой запрос
Отредактированно ZloiKombat (29.03.2012 22:18:52)
Неактивен