|
Group By
|
|||
---|---|---|---|
#18+
Подскажите как правильно избавиться от дублирования строк в результате поиска? (Как правильно вставить group by id_zajavka) Поисковой скрипт немного тяжеловат использует постраничный вывод, конвертер валют и работает с 5 реляционными таблицами и если в одной из таблиц присутствует в результате одна заявка сразу с тремя результатами то он дублирует эту заявку. Пробовал вставить “group by id_zajavka” перед “HAVING” но поиск сразу начинает обрезать поисковые значения, а после “HAVING” отказывается вообще что-либо искать. Помогите правильно вставить Groub by id_zajavka Пример результата поиска: -------------------------------------------------------------------------------- Фирма: Сапсан Страна: Россия, Города: Москва, Свердловск, Тула. Даты заездов: 12-03-2003; 15-03-2003; 17-03-2003; -------------------------------------------------------------------------------- Фирма: Сапсан Страна: Россия, Города: Москва, Свердловск, Тула. Даты заездов: 12-03-2003; 15-03-2003; 17-03-2003; -------------------------------------------------------------------------------- Фирма: Сапсан Страна: Россия, Города: Москва, Свердловск, Тула. Даты заездов: 12-03-2003; 15-03-2003; 17-03-2003; -------------------------------------------------------------------------------- и т.д. Пример скрипта: $show_rows = '10'; if (!isset($limit)) $limit=0; else $limit=$limit-1; $select = "SELECT id_tr, name_f, price, val, .... case val when '0' then price/$dkr when '2' then price*$ekd else price end as newf "; $from = " FROM travel, firms..."; $where = " WHERE travel.id_f_tr=firms.id_f ... ... special.id_special=travel.id_special_tr HAVING newf <= '$cena'"; if ($nf != "") { $where .= " AND firms.name_f LIKE '%$nf%'";} if ($ids != "") { $where .= " AND travel.id_special_tr = '$ids'";} if ($ida != "") { $where .= " AND trg.id_are_trg = '$ida'";} if ($idc != "") { $where .= " AND are.id_country_a = '$idc'";} else {$where .="order by newf LIMIT $limit,$show_rows"; $limit=$limit+1; } ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2003, 10:14 |
|
Group By
|
|||
---|---|---|---|
#18+
Попробуй http://www.mysql.com/doc/ru/SELECT.html] SELECT DISTINCT . ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2003, 10:21 |
|
Group By
|
|||
---|---|---|---|
#18+
:( уже пробовал и SELECT DISTINCT .. И SELECT DISTINCT (id_zajavka), ... ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2003, 11:18 |
|
Group By
|
|||
---|---|---|---|
#18+
Делай GROUP BY по все тем полям которые определяют у тебя "равность" записей! ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2003, 11:27 |
|
Group By
|
|||
---|---|---|---|
#18+
Я согласен, но куда его вставить? Если вставить “group by id_zajavka” перед “HAVING” - поиск сразу начинает обрезать поисковые значения, а после “HAVING” отказывается вообще, что-либо искать. Помогите правильно вставить Groub by id_zajavka ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2003, 13:20 |
|
Group By
|
|||
---|---|---|---|
#18+
group by долже быть перед havingом всегда, а в havinge могут быть только те поля, что в selectе //не совсем понятно что значит "обрезать поисковые значения"... ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2003, 13:28 |
|
Group By
|
|||
---|---|---|---|
#18+
если ставить group by перед Having то он перестает проводить полный поиск в реляционных таблицах, через необязательные значения (ищет по первому значению, а второе ...пятое значенте искать отказывается): if ($nf != "") { $where .= " AND firms.name_f LIKE '%$nf%'";} if ($ids != "") { $where .= " AND travel.id_special_tr = '$ids'";} if ($ida != "") { $where .= " AND trg.id_are_trg = '$ida'";} if ($idc != "") { $where .= " AND are.id_country_a = '$idc'";} ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2003, 13:48 |
|
|
start [/forum/topic.php?fid=47&msg=32272888&tid=1855763]: |
0ms |
get settings: |
10ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
53ms |
get topic data: |
21ms |
get forum data: |
2ms |
get page messages: |
46ms |
get tp. blocked users: |
1ms |
others: | 13ms |
total: | 168ms |
0 / 0 |