Почему условие неравно не так работает?

Dima77

Guest
Почему условие неравно не так работает?

в этой теме решил вопрос по другому поставить...

WHERE group_mest.index_2=$index_2
в этом случае запрос проходит если в столбце таблице есть хотябы одно значение равно указанному (т.е. программа просматривает весь столбик)

почему в случае неравенства программа просматривает только первое значение, а не весь столбик?
WHERE group_mest.index_2<>$index_2

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

SiMM

Новичок
Dima77, не понятно, каким боком этот вопрос относится к PHP, а не MySQL, но, всё же проявив подобие телепатии, попробую послать тебя в ман по [m]mysql_query[/m], где чётко написано, как доставать данные. Если всё же тебе возвращается лишь один результат ([m]mysql_num_rows[/m] даёт 1), то либо у тебя в таблице больше ничего нет, либо ты скрываешь запрос - ответить на вопрос "почему" даже не видя запроса - невозможно.
 

Dima77

Guest
мне кажется вопрос не совсем понят...
предположим в столбике index_2 есть значения:
1
7
2
3

при условии group_mest.index_2=$index_2 ($inde_2 к примеру равным 3 прогрмма ищет и находит, если 5 не находит, тоже нормально)

если же я хочу проверить столбик на отсутствие значения
group_mest.index_2<>$index_2, т.е. выполнять условие, если
если в столбике нет ни одного совпадающего значения ($index_2 к примеру 2)
программа видит, что 2 не равно 1 и успокаивается, а дальше столбик не просматривает...

т.е. в программе нет ошибки и mysql_query() работает нормально...
 

Дионис

Guest
Ты бы привел запрос полностью, а заодно каким образом вытаскиваешь результат из запроса. А то здесь и в самом деле телепатов не водятся. Да и существуют ли такие в природе:)
 

Dima77

Guest
$query="DELETE group_mest
FROM member_mesto, group_mest
WHERE group_mest.index_2=$index_2 AND member_mesto.index_2<>$index_2";
$result_id=mysql_query ($query)
or die ("Невозможно выполнить запрос1");
 

Дионис

Guest
А как можно удалить из таблицы group_mest записи если они равны в ней твоему значению, а в другой таблице они неравны этому значению? Другое дело, если бы ты хотел удалить несоответствующие строки из таблицы group_mest для таблицы member_mesto.
 

Dima77

Guest
А как можно удалить из таблицы group_mest записи если они равны в ней твоему значению, а в другой таблице они неравны этому значению?
Все правильно..., именно на этот вопрос и хочу получить ответ...)))))
таблицы объеденены по столбцам index_2, если значения одной таблицы не используются в другой тогда такую запись можно удалить...
 

Дионис

Guest
А так не пробовал:
DELETE FROM group_mest.index_2 LEFT JOIN member_mesto.index_2
USING(index_2)
WHERE member_mesto.index_2 is NULL
 

Dima77

Guest
это не правильный запрос... проверка идет на отсутствующие значения, так, что при помощи этого условия можно только помолиться и потопать ногами)))))

пришлось как всегда идти огородами....

$query="SELECT member_mesto.index_2
FROM member_mesto
WHERE member_mesto.index_2=$index_2";
$result_id=mysql_query ($query)
or die ("&#205;&#229;&#226;&#238;&#231;&#236;&#238;&#230;&#237;&#238; &#226;&#251;&#239;&#238;&#235;&#237;&#232;&#242;&#252; &#231;&#224;&#239;&#240;&#238;&#241;1111111");

$row=mysql_fetch_array ($result_id);
$index_1=$row["index_2"];

if (!isset ($index_1))
$index_1=0;

$query="DELETE group_mest
FROM member_mesto, group_mest
WHERE group_mest.index_2=$index_2 AND
$index_1=0 ";
$result_id=mysql_query ($query)
or die ("&#205;&#229;&#226;&#238;&#231;&#236;&#238;&#230;&#237;&#238; &#226;&#251;&#239;&#238;&#235;&#237;&#232;&#242;&#252; &#231;&#224;&#239;&#240;&#238;&#241;1");

все работает, но посморите какой код пришлось писать за место какого то одного условия...(((

Наверное доктора после праздников отдохнут и что нить посоветуют...
 

Дионис

Guest
Но ведь если в первой таблице значение есть, и его нужно удалить, так как во второй таблице этого значеия нет... То есть, получается удаление несоответствующих строк... Хотя надо бы у Фаната спросить. ФАНА-А-А-АТ!!! ГДЕ ТЫ?
 

yaniks

новичок
Автор оригинала: Dima77
пришлось как всегда идти огородами....

$query="SELECT member_mesto.index_2
..............................
не проще ли сначала выбрать несоответствия в двух таблицах, а потом уже удалить

$query="SELECT index_2 FROM group_mest LEFT JOIN member_mesto ON group_mest.index_2=member_mesto.index_2
WHERE member_mesto.index_2 IS NULL";
$res=mysql_query($query);
if($res && mysql_num_rows($res)>0){
$DEL_ARRAY=array();
while($res=mysql_fetch_assoc($query)){
$DEL_ARRAY[]=$res[index_2];
}
mysql_query("DELETE FROM group_mest WHERE index_2 IN ( '".implode("' , '",$DEL_ARRAY)."' )");
}
 

Dima77

Guest
интересный вариант конечно тоже..., но тоже огородами
в плане компактности практически тоже самое, я тоже короче могу записать:

$query="SELECT member_mesto.index_2 FROM member_mesto WHERE member_mesto.index_2=$index_2";
$result_id=mysql_query ($query) or die (" is not запрос1");
$row=mysql_fetch_array ($result_id);
$index_1=$row["index_2"];
if (!isset ($index_1)) $index_1=0;
$query="DELETE group_mest
FROM member_mesto, group_mest WHERE group_mest.index_2=$index_2 AND $index_1=0 ";
$result_id=mysql_query ($query) or die ("is not запрос2");

Я пришел к выводу, что в Mysql (4.1.5) любое условие отрицания не корректно работает... ("колонка таблицы<>переменная", "колонка таблицы!=переменная" и так если можно, "колонка таблицы not is переменная" )
т.е. происходит сравнение только с первым значение колонки таблицы.
 
Сверху