![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 47 Pomógł: 4 Dołączył: 12.07.2003 Ostrzeżenie: (0%) ![]() ![]() |
Witam,
mam kilka rzeczy, które blokują mi pracę nad projektem - otóż: Optymalizacja: Tabela kategorii składa się z dwóch kolumn:
w niej powiązania kategorii. jeżeli `category_parent_id` = 0; to jest to kategoria glowna. w moim sklepie (skrypt joomla) po wygenerowaniu strony znam aktualną kategorię, ale chcę wyciągnąć z powyższej tabeli główną kategorię. Napisałem samo-powtarzającą się funkcję która wykonuje X zapytań. Ale gdy będzie to powiedzmy 10 podkategoria, to będę miał 10 zapytań. oto przykład:
Pytanie 1: Czy jest możliwość zrobienia tego w jednym zapytaniu, tak aby nie było różnicy, czy jest to 10 poziom w drzewku czy np 60(przesadzilem teraz oczywiscie) Problem z zapytaniem: Mam nieznaną liczbę tabel o szablonowej nazwie `jos_vm_product_type_#`, gdzie # to nr od 1 do ... w każdej z nich jest kolumna `product_id` ilość tabel wyciągam za pomocą:
i za pomocą PHP generuje kolejne złożone zapytanie. Pytanie 2a: czy da się w jakiś inny sposób określić tabele jaka mają zostać przeszukane nie znając ich ilości, a tylko szablon nazwy bez zapytania o ilość tabel? chciałbym np znaleźć wartość 106 w tym polu - dana wartość może wystąpić tylko 1 raz (np gdy jest w tabeli_1, to w pozostałych już jej na pewno nie ma). próbowałem zrobić to za pomocą UNION:
ale zostaje zwrócony taki oto wynik:
w taki oto sposób, muszę zdefiniować za pomocą php, czy w polach A1,A2,A3 ... nie wystąpiła jakaś wartość != "". Pytanie 2b: jak skonstruować zapytanie, które przeszuka mi wszystkie tabele o szablonie nazwy podanym wyżej, przeszuka po polach `product_id` i zwróci mi wynik w postaci `product_id`='106' oraz nazwe/nr tabeli w ktorej wystapila ta wartość. Pozdrawiam |
|
|
![]() |
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 4 340 Pomógł: 542 Dołączył: 15.01.2006 Skąd: Olsztyn/Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Może mi się tylko wydaje bo nie jestem wymiataczem SQL no ale tu jak machniesz JOIN i przyłączysz sobie wszystkie tabele do dostaniesz wynik a1, a2, a3.. i część będzie NULL a część będzie wypełniona bo chyba o to Ci chodzi. No ale niewiem czy dobrze zrozumiałem bo krótko spałem dziś w nocy. -------------------- I'm so fast that last night I turned off the light switch in my hotel room and was in bed before the room was dark - Muhammad Ali.
Peg jeżeli chcesz uprawiać sex to dzieci muszą wyjść, a jeżeli chcesz żeby był dobry ty też musisz wyjść - Al Bundy. QueryBuilder, Mootools.net, bbcradio1::MistaJam http://www.phpbench.com/ |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 47 Pomógł: 4 Dołączył: 12.07.2003 Ostrzeżenie: (0%) ![]() ![]() |
no właśnie chciałbym, aby zwrocona została jedna kolumna `product_id` z wynikiem, a jeszcze lepiej jakby została zwrócona tabela, w której znajduje się ta wartość.
mógłbym oczywiście zrobić tutaj IF (A1 == 106) return 'tabela_1'; etc. ale jednak chcialbym mieć już wyciagnieta nazwe tabeli z zapytani. |
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 4 340 Pomógł: 542 Dołączył: 15.01.2006 Skąd: Olsztyn/Warszawa Ostrzeżenie: (0%) ![]() ![]() |
![]()
wtedy bedziesz mial jaka to tabela w zmiennej nazwa_tabeli -------------------- I'm so fast that last night I turned off the light switch in my hotel room and was in bed before the room was dark - Muhammad Ali.
Peg jeżeli chcesz uprawiać sex to dzieci muszą wyjść, a jeżeli chcesz żeby był dobry ty też musisz wyjść - Al Bundy. QueryBuilder, Mootools.net, bbcradio1::MistaJam http://www.phpbench.com/ |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 47 Pomógł: 4 Dołączył: 12.07.2003 Ostrzeżenie: (0%) ![]() ![]() |
o - dzięki. jeden problem z głowy. Nie wiedziałem, że jest taka możliwość w mysql. Człowiek uczy się całe życie.
Jeszcze raz dziękuję i muszę ponownie wrócić do źródła (Dokumentacji mysql'a) |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 14.08.2025 - 02:48 |