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
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
Zapytanie:
Zmienna $regexp jest ustawiana następująco:
<?php $regexp = \"^\" . $provider_id . \",|,\" . $provider_id . \",|,\" . $provider_id . \"$|^\" . $provider_id . \"$\"; ?>
No i samo zapytanie
( SELECT *, 1 AS provider, 0 AS sub_provider FROM cities WHERE province_id=$province_id AND providers REGEXP '$regexp' AND sub_providers NOT REGEXP '$regexp' ) UNION ( SELECT *, 0 AS provider, 1 AS sub_provider FROM cities WHERE province_id=$province_id AND providers NOT REGEXP '$regexp' AND sub_providers REGEXP '$regexp' ) UNION ( SELECT *, 1 AS provider, 1 AS sub_provider FROM cities WHERE province_id=$province_id AND providers REGEXP '$regexp' AND sub_providers REGEXP '$regexp' ) ORDER BY name
EDIT: Dołączam rozwiązanie w php
<?php $regexp = \"^\" . $provider_id . \",|,\" . $provider_id . \",|,\" . $provider_id . \"$|^\" . $provider_id . \"$\"; $query = \"(\" . \"SELECT * \" . \"FROM cities \" . \"WHERE \" . \"province_id=\" . $this->province_id . \" AND \" . \"providers REGEXP '\" . $regexp . \"' \" . \")\" . \" UNION \" . \"(\" . \"SELECT * \" . \"FROM cities \" . \"WHERE \" . \"province_id=\" . $this->province_id . \" AND \" . \"sub_providers REGEXP '\" . $regexp . \"'\" . \")\" . \"ORDER BY name\"; $items[] = $row; }; ?>