AND или OR |
||||
|
||||
|
|
||||
![]() ![]() |
Здравейте, от няколко дни се чудя и чета по форуми и документации как да реша следната задача. Имам Таблица с условно 2 полета. |integer|float| |1 |1.2 | |2 |2.3 | |3 |4.6 | |4 |6.6 | |5 |7.6 | |6 |8.6 | Задачата е да изведа редовете които едновременно отговарят на различни условия. Например: integer=2 и float e между 1 и 3, както и integer=4 и float e между 5 и 6 Пробвах с WHERE (integer=2 AND float BETWEEN 1 AND 3) AND (integer=4 AND float BETWEEN 5 AND 6) и с WHERE (integer=2 AND float BETWEEN 1 AND 3) OR (integer=4 AND float BETWEEN 5 AND 6) Но първото не ми връща резултати, тъй като явно mysql игнорира скобите и няма резултати в които integer=2 и float BETWEEN 5 AND 6 - смесват се условията С OR почти успях но пък там проблема е че при повече записи ми изкарва и такива редове, които имат само едното условие, а на мен ми трябват и двете да са изпълнени. Благодаря предварително за отговорите. |
|||
|
---------------------------
Потребител от: 04.09.08 | Всички уроци от ivanov24 | Всички скриптове от ivanov24 |
||||
|
|
||||
|
||||
|
|
||||
![]() ![]() ![]() |
Здрасти. Пробвай по този начин да видим. Надявма се да съм те разбрал правилно: CODE
Ако не стане пиши пак. Поздрави! |
|||
|
---------------------------
Потребител от: 18.04.04 | Всички уроци от Mutatos | Всички скриптове от Mutatos Търся за почасова надомна работа преводачи от английски език за превод на материали от IT сферата - новини, уроци ...! |
||||
|
|
||||
|
|
||||
![]() |
При последната заявка просто ще излезе че при INT 2 и float между 5 и 6 ще даде резултат. Какъв е проблема с OR? Той ще ти изкара резултати, които отговарят на заданието ти |
|||
|
---------------------------
Потребител от: 17.02.05 | Всички уроци от PureEvil | Всички скриптове от PureEvil Liberate Tu Temet Ex Inferis |
||||
|
|
||||
|
|
||||
![]() ![]() |
Явно много съм съкратил примера. |ID |SubID |integer |float | |1 |3 |2 |2.5 | |2 |3 |2 |3.5 |-да |3 |3 |2 |3.7 |-да |4 |3 |2 |4.5 | |5 |3 |4 |6.5 | |6 |3 |4 |7.5 |-да |7 |3 |4 |7.6 |-да |1 |4 |2 |2.5 | |2 |4 |2 |3.5 |-да |3 |4 |2 |3.7 |-да |4 |4 |2 |4.5 | |5 |4 |4 |6.5 | |6 |4 |4 |1.5 |-не |7 |4 |4 |2.6 |-не |1 |5 |1 |2.5 | |2 |5 |1 |3.5 | |3 |5 |1 |3.7 | |4 |5 |7 |4.5 | |5 |5 |8 |4.5 | |6 |5 |5 |3.5 | |7 |5 |4 |2.6 | И ми трябва да изкарам всички СубИД, които имат Интегер=2 и за флоат между 3 и 4, едновременно с което същите да имат имат Интегер=4 и за флоат между 7 и 8 Where (integer=2 AND float between 3 и 4) AND (integer=4 AND float between 7 и 8) - не връща резултат, защото mysql гледа дали има и Интегер=2, който да е флоат между 7 и 8 и дали има и Интегер=4, който да е флоат между 3 и 4 а Where (integer=2 AND float between 3 и 4) OR (integer=4 AND float between 7 и 8) - връща и такива редове, които не отговарят и на двете условия. ще върне и SubID 3 и 4, а условието ми е вярно само за SubID 3 дано съм бил по-точен, иначе JOINvam, динамично между 5 и 9 таблици и е много да го постна тука във форума. Eдинственото решение за което се сещам е UNION по отделно, за всвако от условията, но е доста грубо предвид многото JOINove. |
|||
|
Това мнение е редактирано от ivanov24 на 05.09.2008 12:22
---------------------------
Потребител от: 04.09.08 | Всички уроци от ivanov24 | Всички скриптове от ivanov24 |
||||
|
|
||||
|
|
||||
![]() ![]() |
SELECT ... FROM ... WHERE (integer=2 AND float BETWEEN 3 AND 4) OR (integer=4 AND float BETWEEN 7 AND 8) Така трябва да стане! |
|||
|
---------------------------
Потребител от: 20.12.06 | Всички уроци от zipopro | Всички скриптове от zipopro Лъчезар Петров Лечев - 14 - Стара Загора - Уеб Програмист Винчета, болчета гайкии...! |
||||
|
|
||||
|
|
||||
![]() ![]() |
Цитат от zipopro@05.09.2008 14:11: SELECT ... FROM ... WHERE (integer=2 AND float BETWEEN 3 AND 4) OR (integer=4 AND float BETWEEN 7 AND 8)Така трябва да стане! Точно този вариант описвам по-долу в Поста с въпроса си и казвам че така ми вади и СубИД с изпълнено условие в едните скоби, а аз искам и двете да са изпълнени. |
|||
|
---------------------------
Потребител от: 04.09.08 | Всички уроци от ivanov24 | Всички скриптове от ivanov24 |
||||
|
|
||||
|
|
||||
![]() |
Кееефиш @zipopro. Другият път да четеш какво се пита поне. @ivanov24 грешно го правиш просто :). В момента се сещам за това: CODE
|
|||
|
Това мнение е редактирано от PureEvil на 05.09.2008 17:31
---------------------------
Потребител от: 17.02.05 | Всички уроци от PureEvil | Всички скриптове от PureEvil Liberate Tu Temet Ex Inferis |
||||
|
|
||||
|
|
||||
![]() ![]() |
@PureEvil ако имам още едно условие така ли ще стане? CODE
С UNION пробвах, но ми връща същите резултати като с OR |
|||
|
---------------------------
Потребител от: 04.09.08 | Всички уроци от ivanov24 | Всички скриптове от ivanov24 |
||||
|
|
||||
|
|
||||
![]() |
Слагай един EXPLAIN пред заявките и виж как се държат реално. Иначе би трябвало да се получи: пробвай, тествай, чети и нещата ще станат ;). |
|||
|
---------------------------
Потребител от: 17.02.05 | Всички уроци от PureEvil | Всички скриптове от PureEvil Liberate Tu Temet Ex Inferis |
||||
|
|
||||
|
|
||||
![]() ![]() |
Пробвах - Работи. Благодаря за съветите. |
|||
|
---------------------------
Потребител от: 04.09.08 | Всички уроци от ivanov24 | Всички скриптове от ivanov24 |
||||
|
|
||||
|
|
||||
![]() ![]() |
О, ivanov24, кефиш ме. И ми трябва да изкарам всички СубИД, които имат Интегер=2 и за флоат между 3 и 4, едновременно с което същите да имат имат Интегер=4 и за флоат между 7 и 8 Според теб съществува ли запис и може ли да съществува, при който integer да е едновременно равен на 2 и на 4? Защото точно това караш да търси. Where (integer=2 AND float between 3 и 4) AND (integer=4 AND float between 7 и 8)Where (integer=2 AND float between 3 и 4) AND (integer=4 AND float between 7 и 8) - не връща резултат, защото mysql гледа дали има и Интегер=2, който да е флоат между 7 и 8 и дали има и Интегер=4, който да е флоат между 3 и 4 Тази заявка много ясно, че нищо няма да връща. Със OR ще върне резултат: Where (integer=2 AND float between 3 и 4) OR (integer=4 AND float between 7 и 8). Видях, че си решил проблема, но ти казвам за в бъдеще, че такава заявка(тази с AND, която си написал) не е коректна. |
|||
|
---------------------------
Потребител от: 13.12.07 | Всички уроци от Vikito | Всички скриптове от Vikito |
||||
|
|
||||
| 1 посетител чете тази тема (0 потребители и 1 гост) | |||
|
Активни потребители:
---
|
|||
| |||
Още по темата:
php форум,
flash форум,
html форум,
it форум,
seo форум,
vista форум,
pc форум,
css форум,
java форум,
mysql форум,
дизайн форум














Този отговор е маркиран като удовлетворителен!