![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 29 Pomógł: 0 Dołączył: 19.10.2004 Skąd: Opole Ostrzeżenie: (0%) ![]() ![]() |
Jeżeli ktoś jest zainteresowany optymalizacją zapytania to proszę o pomoc.
Co to jest? Baza providerów, operujących na terenie miast i poszczególnych ulic. Dane: $province_id - identyfikator województwa $provider_id - identyfikator dostawcy Tablica miast (cities) z polami:
Dla podanego providera znaleźć miasta w których dostarcza on usługi. Pola:
Zapytanie: Zmienna $regexp jest ustawiana następująco:
No i samo zapytanie
EDIT: Dołączam rozwiązanie w php
Ten post edytował ShaXbee 9.12.2004, 22:50:04 |
|
|
![]() |
![]()
Post
#2
|
|
![]() Grupa: Zarząd Postów: 2 277 Pomógł: 6 Dołączył: 27.12.2002 Skąd: Wołów/Wrocław ![]() |
Kod SELECT *, IF( providers REGEXP '$regexp' , 1, 0 ) AS provider, IF( sub_providers REGEXP '$regexp' , 1, 0 ) AS sub_provider FROM cities WHERE province_id=$province_id AND ( ( providers REGEXP '$regexp' AND sub_providers NOT REGEXP '$regexp' ) or ( providers NOT REGEXP '$regexp' AND sub_providers REGEXP '$regexp' ) or ( providers REGEXP '$regexp' AND sub_providers REGEXP '$regexp' ) ) ORDER BY name Tylko musisz się zastanowić, czy w tym zapytaniu potrzebne jest takie dokładne uwarunkowywanie w WHERE (oczywiście moga być jakieś literówki ![]() -------------------- "Niezależnie od tego, jakie masz osiągnięcia, ktoś Ci pomaga..."
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 29 Pomógł: 0 Dołączył: 19.10.2004 Skąd: Opole Ostrzeżenie: (0%) ![]() ![]() |
Zapomniałem wspomnieć o jednej rzeczy
![]() ![]() BTW instrukcja IF bardzo mi się przyda :] |
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarząd Postów: 2 277 Pomógł: 6 Dołączył: 27.12.2002 Skąd: Wołów/Wrocław ![]() |
ale jaką ja wykorzystałem funkcje, dostępna tylko pod MYSQL 5 ?
Wydawało mi się, że moje zapytanie jest nawet bardziej kompatybilne z starszymi wersjami MySQL (bo nie używa UNION, które w MySQL jest dosyć nowym wynalazkiem)... -------------------- "Niezależnie od tego, jakie masz osiągnięcia, ktoś Ci pomaga..."
|
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 29 Pomógł: 0 Dołączył: 19.10.2004 Skąd: Opole Ostrzeżenie: (0%) ![]() ![]() |
Cytuje z dokumentacji MySQL
Cytat An OR using a single key is well optimized, as is the handling of AND. The one tricky case is that of searching on two different keys combined with OR: SELECT field1_index, field2_index FROM test_table WHERE field1_index = '1' OR field2_index = '1' This case is optimized from MySQL 5.0.0. See section 7.2.6 Index Merge Optimization. In MySQL 4.0 and up, you can also solve the problem efficiently by using a UNION that combines the output of two separate SELECT statements. See section 13.1.7.2 UNION Syntax. Link: http://dev.mysql.com/doc/mysql/en/Searching_on_two_keys.html |
|
|
![]() ![]() |
![]() |
Aktualny czas: 21.08.2025 - 12:21 |