Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Skomplikowane (?) zapytanie
ShaXbee
post
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:
  • id - unikalny identyfikator miasta
  • province_id - identyfikator województwa w którym się znajduje miasto
  • name - nazwa miasta
  • providers - lista id providerów dostarczających usługi na terenie całego miasta
  • sub_providers - lista id providerów dostarczających usługi na terenie określonych w innej tabeli ulic danego miasta
Wynik zapytania:

Dla podanego providera znaleźć miasta w których dostarcza on usługi.

Pola:
  • id
  • name
  • provider - równe 1 jeśli dany provider jest na liście w polu cities.providers
  • sub_provider - równe 1 jeśli provider jest na liście w polu cities.sub_providers
Miasta nie mogą się dublować - i tu mam problem - nie potrafię wyeliminować z poziomu MySQL duplikatów.

Zapytanie:

Zmienna $regexp jest ustawiana następująco:

  1. <?php
  2. $regexp = &#092;"^\" . $provider_id . \",|,\" . $provider_id . \",|,\" . $provider_id . \"$|^\" . $provider_id . \"$\";
  3. ?>


No i samo zapytanie
  1. (
  2. SELECT *, 1 AS provider, 0 AS sub_provider
  3. FROM cities WHERE province_id=$province_id AND providers REGEXP '$regexp' AND sub_providers NOT REGEXP '$regexp'
  4. )
  5. UNION
  6. (
  7. SELECT *, 0 AS provider, 1 AS sub_provider
  8. FROM cities WHERE province_id=$province_id AND providers NOT REGEXP '$regexp' AND sub_providers REGEXP '$regexp'
  9. )
  10. UNION
  11. (
  12. SELECT *, 1 AS provider, 1 AS sub_provider
  13. FROM cities WHERE province_id=$province_id AND providers REGEXP '$regexp' AND sub_providers REGEXP '$regexp'
  14. )
  15. ORDER BY name


EDIT: Dołączam rozwiązanie w php

  1. <?php
  2.  
  3. $regexp = &#092;"^\" . $provider_id . \",|,\" . $provider_id . \",|,\" . $provider_id . \"$|^\" . $provider_id . \"$\";
  4.  
  5. $query =
  6. &#092;"(\" .
  7. &#092;"SELECT * \" .
  8. &#092;"FROM cities \" .
  9. &#092;"WHERE \" .
  10. &#092;"province_id=\" . $this->province_id . \" AND \" .
  11. &#092;"providers REGEXP '\" . $regexp . \"' \" .
  12. &#092;")\" .
  13. &#092;" UNION \" .
  14. &#092;"(\" .
  15. &#092;"SELECT * \" .
  16. &#092;"FROM cities \" .
  17. &#092;"WHERE \" .
  18. &#092;"province_id=\" . $this->province_id . \" AND \" .
  19. &#092;"sub_providers REGEXP '\" . $regexp . \"'\" .
  20. &#092;")\" .
  21. &#092;"ORDER BY name\";
  22.  
  23. $result = mysql_query($query);
  24.  
  25. while($row = mysql_fetch_array($result)){
  26.  
  27.  if(in_array($provider_id, explode(&#092;",\", $row[\"providers\"]))){ $row[\"city_provider\"] = TRUE; } else { $row[\"city_provider\"] = FALSE; };
  28.  if(in_array($provider_id, explode(&#092;",\", $row[\"sub_providers\"]))){ $row[\"sub_provider\"] = TRUE; } else { $row[\"sub_provider\"] = FALSE; };
  29.  
  30.  $items[] = $row;
  31.  
  32. };
  33.  
  34. ?>


Ten post edytował ShaXbee 9.12.2004, 22:50:04
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 19.08.2025 - 06:58