Autor Zpráva
biggos
Profil *
Zdravím na internetu jsem našel že když chcu hledat vae více tabulkách stačí za from napsat více tabulek odělených čárkou ale když jsem to tak udělal tak to vyhazuje error:
Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource in D:\VertrigoServ\www\search.php on line 91

script:

$result = mysql_query("
    SELECT *
    FROM `produkty`, `dalsi produkty`........
    WHERE MATCH(nazev,popis ) AGAINST ('$search' IN BOOLEAN MODE)
    ORDER BY 5 * MATCH(nazev) AGAINST ('$search') + MATCH(popis) AGAINST ('$search') DESC
");
while ($row = mysql_fetch_object($result)) {   <-------řádek 91

Mohli byste mi poradit jak to spravit?
juriad
Profil
biggos:
Když je uvedeš oddělené čárkou jedná se o CROSS JOIN a ten rozhodně nechceš. To by vytvořilo řádky všech možných kombinací mezi těmi dvěma (více tabulkami). Pokud má 1. tabulka 200 záznamů a 2. má 300 záznamů, bude výsledek mít 60000 záznamů.
Pokud se v nich sloupce jmenují stejně, dojde k chybě (ambigous column name nebo něco podobného).
Kdykoli při práci s databází dostaneš chybu (většina funkcí vrací FALSE při chybě), vypiš si jí pomocí mysql_error.

Ty nechceš propojit tabulky, ale sloučit tabulky, musíš hledat UNION.
SELECT * FROM
(SELECT * FROM produkty
UNION ALL
SELECT * FROM dalsi_produkty) AS vse
WHERE ...
Pozor obě tabulky musí musí mít stejný počet sloupců a myslím, že by i měly být stejně pojmenované.

Máš vůbec nějaký důvod mít dvě různé tabulky, když obsahují stejná data (proč bys jinak chtěl hledat v obou)?
Keeehi
Profil
biggos:
Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource in
To je proto, že máš v SQL chybu a tak funkce mysql_query místo výsledků vrací false.
Vypiš si chybu s mysql_error().

Na problém s Cross joinem už upozornil juriad. Hlavně čím větší počet tabulek tím větší problém.

juriad:
myslím, že by i měly být stejně pojmenované
Mohou být pojmenované jakkoli. Jen počet musí sedět.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0