Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Составление SQL-запросов > sql запрос к бд


Автор: namra 2.7.2014, 11:19
Здравствуйте, помогите составить запрос использую БД MYSQL.
В таблице есть записи
1) Mercedes A180
2) Hundai Accent
3) Hundai Elentra

1) Выбираем категорию Авто с пробегом выдает все 3 записи
2) Выбираем марку Hundai должно выводится  две записи 2 и 3 
3) выбираем марку Hundai модель Accent должно выводиться только одна запись под номером 2

Данная конструкция не помогает, не знаю как еще 

Код

$advert=Material::model()->findAll('category=:category && mydate2>:mydate2 && (pole1=:marka || pole2=:model)',
array(':category'=>$_GET['category'],':mydate2'=>$tek_date,':marka'=>$_GET['marka'],':model'=>$_GET['model']));

Автор: Romikgy 2.7.2014, 11:37
имхо данная конструкция не является sql запросом...

Автор: namra 2.7.2014, 11:39
ну я чтобы смысл был понятен написал, а так потом преобразую в нужную мне форму, мне главное увидеть конструкцию на чистом sql ка будет выглядеть

Автор: ТоляМБА 2.7.2014, 12:38
namra, допустим, есть таблица Table1
В ней поля Mark, Model, Probeg
В них данные:
----------------------------------
Mark           Model      Probeg
----------------------------------
Lada           Kalina     0
Mercedes    A180      12000
Hundai        Accent    5000
Hundai        Elentra   10000
Цитата(namra @  2.7.2014,  13:19 Найти цитируемый пост)
1) Выбираем категорию Авто с пробегом выдает все 3 записи

Код
Select *
From Table1
Where Probeg > 0

Цитата(namra @  2.7.2014,  13:19 Найти цитируемый пост)
2) Выбираем марку Hundai должно выводится  две записи 2 и 3 

Код
Select *
From Table1
Where Mark = "Hundai"

Цитата(namra @  2.7.2014,  13:19 Найти цитируемый пост)
3) выбираем марку Hundai модель Accent должно выводиться только одна запись под номером 2

Код
Select *
From Table1
Where Mark = "Hundai" and Model = "Accent"

Автор: namra 2.7.2014, 21:02
ТоляМБА,  то что вы написали  это я знаю, я хотел бы это выразить одной строкой sql  запроса не могу разобраться с логическими выражениями, или такое в принципе не возможно?

Автор: ТоляМБА 2.7.2014, 21:10
namra, можно и одной строкой - пишите между запросами UNION

Добавлено через 1 минуту и 52 секунды
Или так:
Код
Select *
From Table1
Where (Probeg > 0) or (Mark = "Hundai") or (Mark = "Hundai" and Model = "Accent")

Автор: namra 2.7.2014, 21:40
ТоляМБА, используя ваш запрос постоянно выдает все три

Автор: ТоляМБА 2.7.2014, 22:07
Вы написали три вопроса, я дал вам три запроса соответственно, вы хотели их (как я понял эти запросы) выразить одной строкой, пожалуйста!
Цитата(namra @  2.7.2014,  23:02 Найти цитируемый пост)
 я хотел бы это выразить одной строкой sql  запроса

Пишите тогда конкретно, что вы хотели выразить!

Автор: namra 2.7.2014, 22:26
Приложил картинку, есть поле select, допустим там выбрали категорию "Авто с пробегом",
выдает все авто которые есть в базе категория у которых "Авто с пробегом" - Mersedes 190, Hundai Accent, Hundai Elantra, теперь пользователь захотел сделать фильтр по категории "Авто с пробегом" но при этом выбрав определенную марку Hundai например (т.е Авто с пробегом марка Hundai ) должно выдать Hundai Accent, Hundai Elantra так как выбрали доп поле Марку Hundai , Mersedes хоть и относится к категории "Авто с пробегом", но не выдается в результатах так как мы выбрали определенную марку. Надеюсь понятно объяснил.

Автор: ТоляМБА 3.7.2014, 07:35
Цитата(namra @  3.7.2014,  00:26 Найти цитируемый пост)
теперь пользователь захотел сделать фильтр по категории "Авто с пробегом"

Вот отсюда и начнём:
1. Если «авто с пробегом» то начальный запрос будет 
Код
Select * From Table1 Where (Probeg > 0)

2. Если «какое либо другое условие», то начальный запрос должен иметь вид 
Код
Select * From Table1 Where (<условие>)

3. Если «все авто» то начальный запрос будет 
Код
Select * From Table1 Where (1=1)


Опишу на Delphi, думаю переделать в php, Вам не составит труда.
На форме у Вас Доп. фильтры: Марка (Edit1 – поле для ввода марки) и Модель (Edit2 – поле для ввода модели).

SQLText – переменная типа строка, в ней будет наш текст для конченого запроса
Edit1.Text и Edit2.Text – содержимое полей Марка и Модель соответственно
Trim(Edit1.Text) и Trim(Edit2.Text)  – содержимое полей Марка и Модель соответственно без пробелов в начале и конце
TrimEditText – переменная типа строка в которой мы будем хранить указанные в предыдущей строке значения
Length(TrimEditText) – количество символов в переменной TrimEditText
QuotedStr(TrimEditText) – значение переменной TrimEditText взятое в кавычки.

Итак:
Код
var
  SQLText, TrimEditText : string;
begin
  SQLText:='Select * From Table1 Where (Probeg > 0)';
  TrimEditText:=Trim(Edit1.Text);
  if (Length(TrimEditText) > 0) then
      SQLText:=SQLText+' and Mark = '+QuotedStr(TrimEditText);
  TrimEditText:=Trim(Edit2.Text);
  if (Length(TrimEditText) > 0) then
      SQLText:=SQLText+' and Model = '+QuotedStr(TrimEditText);
end;


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)