JamalBIG
22.08.2008, 18:58:41
Witam
Czy moglby ktos przeanalizowac moje zapytanie do bazy danych w ktorym chcialem polaczyc wyniki z dwoch tabel ale najwyrazniej mam jakis blad bo nie mam zadnego wyniku...
<?php
$sql = $db->sql_query("SELECT d.*, t.* FROM 'nuke_downloads_downloads' d LEFT JOIN t 'torrent_torrents' WHERE d.title OR d.version OR t.search_text LIKE '%$search%' DESC");
while ($wynik = $db->sql_fetchrow($sql)) {
$lid = $wynik['d.lid'];
$title = $wynik['d.title'];
$id = $wynik['t.id'];
$name = $wynik['t.name'];
}
?>
Witam,
2 rzeczy wpadły mi w oko.
- w momencie gdy masz łączenie LEFT JOIN wydaje mi się, że najpierw powinna być podana nazwa tabeli, a dopiero po niej alias,
- druga sprawa.. jeżeli łączysz tabele za pomocą LEFT JOIN to powinieneś użyć dodatkowo klauzuli USING(arg), gdzie argument jest kolumną o takiej samej nazwie w obu tabelach, lub ewentualnie warunku ON np.. ON d.lid == t.id. Bo za pomocą WHERE ty tylko wydobywasz ważne dla Ciebie rekordy, ale nie łączysz tabel !
- ważne jest też czy tabela t ma rekordy pasujące (właśnie za pomocą łaczenia USING / ON) do tabeli p, bo ona jest właśnie dołączana do tej tabeli, a nie odwrotnie.
Pzdr.
JamalBIG
22.08.2008, 19:33:48
A moglbys mi jakos podpowiedziec jak polaczys prawidlowo te dwie tabele?
Tabela nuke_downloads_downloads ma strukture: LID | TITLE | NAME | VERSION
Tabela torrent_torrents: ID | NAME | SEARCH_TEXT
SELECT d.*, t.* FROM 'nuke_downloads_downloads' d LEFT JOIN 'torrent_torrents' t ON d.title=t.name WHERE d.title OR d.version OR t.search_text LIKE '%$search%' DESC
To zależy co w obu tabelach będzie się powtarzało.. innymi słowy co będzie "wspólnym kluczem" dla obu tabel. Jeżeli name z tabeli t będzie mogło mieć takie same wartości co title z tabeli d, to warunek ON, który podałeś powinien w pełni załatwić sprawę.
JamalBIG
22.08.2008, 21:01:42
A czy wspolnym kluczem moze byc szukane slowo (wyrazenie)? Bo chodzilo mi o zrobienie wyszukiwarki ktora przeszukiwa by dwie tabele...