TwojePC.pl © 2001 - 2024
|
|
A R C H I W A L N A W I A D O M O Ś Ć |
|
|
|
Dwa prosto-trudne problemy - z SQL i pytanie z CSS , kubazzz 24/11/09 12:31 1. SQL
Poczytałem trochę, wiem już czym się różni left od right join itd, ale znowu napotkałem na problem.
Mam trzy tabele:
produkty: p_id | p_name | p_subcategory
subcategiores: s_id | s_name | s_category
categories: c_id | c_name
Każdy produkt jest przypisany do podkategorii za pomocą p_subcategory=s_id. Każda podkategoria jest podpięta pod kategorię za pomocą s_category=c_id.
Używając składni "SELECT * FROM produkty t1, subcategories t2, categories t3" mogę wybrać wszystkie produkty gdzie jest ustalona podkategoria, a dla danej podkategorii kategoria główna, dostanę tylko pełne rezultaty.
"SELECT products.*, subcategories.* FROM products LEFT JOIN subcategories ON subcategories.s_id=products.p_subcategory ORDER BY products.p_id"
To mi wybierze wszystkie produkty i podkategorie, nawet jesli nie ma podkategorii przypisanej dla danego produktu.
Jak zrobić taki SELECT, ale z trzech tabel
czyli: chcę dla każdego wiersza wyników mieć produkt, podkategorię i też kategorię, nawet te produkty dla których któreś powiązania są niepełne.
Jak do tego dołączyć dodatkowy warunek, np taki żeby wybrał mi wg powyższego schematu, ale tylko produkty, które sa powiązane z podkategorią s_id=3, albo [to trudniejsze bo produkt nie jest bezpośrednio powiązany z kategorią, a pośrednie poprzez tablicę subkategorii] produkty powiązane z kategorią c_id=5 [czyli należące do wszystkich podkategorii kategorii c_id=5], albo dowolny inny warunek.
Kombinowałem i mam syntax error, albo jakieś głupie wyniki.
2. CSS
Jak zrobić cross-browser min-width?
Coś takiego, że wyśrodkowana strona dwukolumnowa [na floatach] ma minimalną szerokość 800px, ale w jeśli jakiś element wewnątrz prawej kolumny wymusi szerokość większą [np tabela o minimalnej szerokości 900px] to strona się rozciągnie w bok [ale nie scroll].
Jak wiadomo IE ma problem z min-height i min-width, nie działają w ogóle pod IE6.
Na min-height mam fajny hack
{min-height:400px; height:auto !important; height:400px;}
Ale z width to nie działa tak jak powinno, strona się rozszerza na 100% szerokości i nawet się nie scrolluje w bok, tylko zrzuca elementy jeden pod drugi.
Zna ktoś na to jakiś patent?SM-S908 - nie mam SQL pod ręką , gorii 24/11/09 13:16
więc zapytania nie podam ale potrzebujesz OUTER JOIN które wybiera również gdy nie ma powiązań, coś w tym stylu:
SELECT ... FROM products OUTER JOIN subcategories ON s_id = p_subcategory OUTER JOIN categories ON s_category = c_id - na przykład , Sherif 24/11/09 13:31
select blabla from t1
left join t2 on ...
left join t3 on ... - jeżeli kategoria jest nadrzędna do subkategorii, to zrób right joina , mjenso 24/11/09 15:03
select a.*, b.*, c.*
from produkty a
left join subcategiores b on a.p_subcategory=b.s_id
left join categories c on b.s_category=c.c_id
where b.s_id=3 and c.c_id=5http://www.cert-clan.com - Yyyy , Tig3r 24/11/09 20:54
1.
SELECT prod.*, subcat.*, cat.* FROM products AS prod LEFT JOIN subcategories AS subcat ON (subcat.s_id=prod.p_subcategory) LEFT JOIN categories AS cat ON (cat.c_id=subcat.s_category) WHERE cat.c_id='5'
przy podaniu warunków (po where) używaj nazwy(lub aliasu) do tabeli. Polecam też żeby odpowiadające sobie pola w różnych tabelach miały takie same nazwy, np: s_id zamiast p_subcategory, albo c_id zamiast s_category. Plusem takiego rozwiązania jest większa czytelność oraz możliwość użycia JOIN...USING zamiast JOIN...ON co także momentami poprawia czytelność.
2.
Po pierwsze olej IE6. Po drugie możesz zamiast ustawiać min-width wstawić do środka element który rozepcha go do żądanej minimalnej szerokości, np:
zamiast <div style='min-width: 900px'>...</div>
można zrobić
<div><div style='width: 900px; height:1px'></div>...</div>- ok.. , kubazzz 24/11/09 22:25
IE6 nie mogę olać bo to podstawowa przeglądarka osoby oceniającej.SM-S908
|
|
|
|
|
All rights reserved ® Copyright and Design 2001-2024, TwojePC.PL |
|
|
|
|