Возникла такая ситуация:
В тавлице TABLE1 существует две записи с одинаковыми LAST_NAME, FIRST_NAME, MIDDLE_NAME, и с разными значениями полей ID, SIZE и DATE.
Поле ID генерируется, так что оно различно.
Одна запись сделана раньше другой, но поля DATE различны в обратном порядке. например:
2. ID=2357; SIZE=100; DATE=2007; <- последняя запись в таблице
1. ID=9942; SIZE=800; DATE=2008; <- первая запись в теблице
В случае когда я выбираю из таблицы нужную строку при помощи sqlplus, строка выбирается нормально. то есть:
select ID from TABLE1 where LAST_NAME = 'ИВАНОВ' and FIRST_NAME = 'ИВАН' and MIDDLE_NAME = 'ИВАНОВИЧ' and SIZE = 100;
возвращается нужный id, типа "2357".
Но когда я строю запрос в PHP, то строка не возвращается (без ошибки), то есть просто запрос ничего не находит.
Вот тот кусок кода построения запроса:
$req = "select ID from TABLE1";
$req .= " where FIRST_NAME = 'ИВАН'";
$req .= " and MIDDLE_NAME = 'ИВАНОВИЧ'";
$req .= " and LAST_NAME = 'ИВАНОВ'";
$req .= " and SIZE = 100";
$cur=ora_open($con);
$cur = ora_do($con,$req);
$row = array();
ora_fetch_into($cur, $row, ORA_FETCHINTO_ASSOC);
print_r($row)
После исполнения кода на экране видим:
-------------
Array
(
)
-------------
Недоумевая я решил попробывать в запросе поменять условие на "and SIZE > 0;"
и получил Array c "ID = 2357"
При условии, что в таблице всего одна строка удовлетворяющая условиям. Но в таблице две строки с "SIZE > 0". То есть, как я понял, он выбрал последню строку в таблице.
Пробовал варианты:
"and SIZE > 0;" - найдена строка с ID=2357 и SIZE=100;
"and SIZE > 100;" - ничего не найдено.
"and SIZE > 200;" - ничего не найдено.
Но если добавляем в код сортировку по полю DATE, то запрос начинает выбирать только строку со значениями "ID=9942" и "SIZE=800".
Добавляем: .req = " order by DATE"; То есть, опять же, как я понял, запрос выбрал последнюю строку сортировки.
"and SIZE > 0;" - найдена строка с ID=9942 и SIZE=800;
"and SIZE > 100;" - найдена строка с ID=9942 и SIZE=800;
...
"and SIZE > 800;" - ничего не найдено.
И наоборот c условием "<":
"and SIZE < 900;" - найдена строка с ID=9942 и SIZE=800;
"and SIZE < 800;" - ничего не найдено.
Почему при строгом равенстве ничего не возвращается ?! И почему при условии "<" или ">" возвращается последняя строка сотрировки!?
Я в тупике и в шоке. не знаю куда дальше думать.
Господа хорошие, подскажите пажалста, где и куда копать.
Спасибо.
Спустя 1 час, 17 минут, 17 секунд (4.06.2008 - 08:24) Ghost написал(а):
почитай здесь, посмотри примеры (это по поводу одной строки)
что касается равенства - у тебя наверное тип данных SIZE какой-нить double или float. и в базе не 100, а 99,9999999999999999999999999..
что касается равенства - у тебя наверное тип данных SIZE какой-нить double или float. и в базе не 100, а 99,9999999999999999999999999..
Спустя 4 часа, 19 минут, 22 секунды (4.06.2008 - 12:44) bupych написал(а):
С ora_fetch_into всё в прядке - если выбор происходит и выгружается в ассоциативный массив, то из этого массива можно вытащить любую ящейку без проблем.
Представление данных из SIZE на экране выглядит именно как "100".
Но в таблице может храниться и как 99.9999999 - я тоже уже думал об этом и пробовал в запросе вставлять ROUND, но как-то результатов это не дало.
А как можно посмотреть какое действительное представление значения SIZE в таблице ?! и как можно при помощи запроса округлить и/или сделать целым значение SIZE ?!
Спасибо.
Цитата
что касается равенства - у тебя наверное тип данных SIZE какой-нить double или float. и в базе не 100, а 99,9999999999999999999999999..
Представление данных из SIZE на экране выглядит именно как "100".
Но в таблице может храниться и как 99.9999999 - я тоже уже думал об этом и пробовал в запросе вставлять ROUND, но как-то результатов это не дало.
А как можно посмотреть какое действительное представление значения SIZE в таблице ?! и как можно при помощи запроса округлить и/или сделать целым значение SIZE ?!
Спасибо.