Zadejte hledaný výraz...

Vyhledávání v MySQL: dvě tabulky v jednom dotazu

damolh
verified
rating uzivatele
7. 8. 2012 14:59:53
Zdravím,
mám dvě tabulky v databázi "články" a "komentáře" a potřebuju sestavit vyhledávací dotaz tak, aby se provedl jedním příkazem. Např. mám tyhle dva dotazy:
SELECT * FROM cms_articles WHERE body LIKE '%retezec%' a SELECT * FROM cms_comments WHERE body LIKE '%retezec%' .
Mělo by to fungovat, podobně jako zde: http://www.comicvine.com/search/?q=normal
Díky za reakce.
7. 8. 2012 14:59:53
https://webtrh.cz/diskuse/vyhledavani-v-mysql-dve-tabulky-v-jednom-dotazu/#reply793809
Ten link co jsi poslal vyzaduje prihlaseni. Zkus si prostudovat (a progooglovat) MySQL prikaz JOIN, ten tvuj problem vyresi. Vic ti toho ted bohuzel neporadim, pisu to z telefonu :)
7. 8. 2012 15:06:21
https://webtrh.cz/diskuse/vyhledavani-v-mysql-dve-tabulky-v-jednom-dotazu/#reply793808
Petr Zachrdla
verified
rating uzivatele
(1 hodnocení)
7. 8. 2012 15:06:57
Pokud mají tabulky stejné sloupce, tak by mohlo stačit mezi to vložit UNION. EDIT: pokud ne, tak mezi SELECT a FROM dej pouze ty sloupce, které jsou v obou tabulkách shodné.
---------- Příspěvek doplněn 07.08.2012 v 15:07 ----------
Napsal 2NiNe;828647
Ten link co jsi poslal vyzaduje prihlaseni. Zkus si prostudovat (a progooglovat) MySQL prikaz JOIN, ten tvuj problem vyresi. Vic ti toho ted bohuzel neporadim, pisu to z telefonu :)
join to nevyřeší. není tam závislost
7. 8. 2012 15:06:57
https://webtrh.cz/diskuse/vyhledavani-v-mysql-dve-tabulky-v-jednom-dotazu/#reply793807
James_Scott
verified
rating uzivatele
(7 hodnocení)
7. 8. 2012 15:09:50
No když uvedl jako příklad tabulku articles a tabulku comments, předpokládal bych že tam je závislost 1:N, takže bych taky doporučil prostudovat JOIN.
Jinak na select ze dvou nezávislých tabulek samozřejmě UNION.
7. 8. 2012 15:09:50
https://webtrh.cz/diskuse/vyhledavani-v-mysql-dve-tabulky-v-jednom-dotazu/#reply793806
vlnk
verified
rating uzivatele
(4 hodnocení)
7. 8. 2012 15:12:58
SELECT a.*,c.*
FROM cms_articles a, cms_comments c
WHERE a.body LIKE '%retezec%' and c.body LIKE '%retezec%'
Výsledek však bude přijatelný s podmínkou, že podmínce vyhoví právě jeden záznam pro alespoň jednu tabulku
7. 8. 2012 15:12:58
https://webtrh.cz/diskuse/vyhledavani-v-mysql-dve-tabulky-v-jednom-dotazu/#reply793805
damolh
verified
rating uzivatele
7. 8. 2012 15:14:37
sorry, za ten link, s tím přihlášením jsem to netušil :D
nicméně, UNION jsem zkoušel, ale když jsem chtěl vyhledávat zároveň např. ve třech tabulkách, tak to trvalo dost dlouho a ke všemu to vracelo přes 100 000 výsledků, když mám v každé tabulce kolem 30záznamů ....
7. 8. 2012 15:14:37
https://webtrh.cz/diskuse/vyhledavani-v-mysql-dve-tabulky-v-jednom-dotazu/#reply793804
Petr Zachrdla
verified
rating uzivatele
(1 hodnocení)
7. 8. 2012 15:18:49
Napsal damolh;828655
sorry, za ten link, s tím přihlášením jsem to netušil :D
nicméně, UNION jsem zkoušel, ale když jsem chtěl vyhledávat zároveň např. ve třech tabulkách, tak to trvalo dost dlouho a ke všemu to vracelo přes 100 000 výsledků, když mám v každé tabulce kolem 30záznamů ....
nahoď ddl od obou tabulek.
7. 8. 2012 15:18:49
https://webtrh.cz/diskuse/vyhledavani-v-mysql-dve-tabulky-v-jednom-dotazu/#reply793803
damolh
verified
rating uzivatele
7. 8. 2012 15:29:39
Napsal Bedříšek;828659
nahoď ddl od obou tabulek.
co myslíš tím ddl? strukturu těch tabulek v sql?
7. 8. 2012 15:29:39
https://webtrh.cz/diskuse/vyhledavani-v-mysql-dve-tabulky-v-jednom-dotazu/#reply793802
Petr Zachrdla
verified
rating uzivatele
(1 hodnocení)
7. 8. 2012 15:31:52
Napsal damolh;828667
co myslíš tím ddl? strukturu těch tabulek v sql?
jj.
7. 8. 2012 15:31:52
https://webtrh.cz/diskuse/vyhledavani-v-mysql-dve-tabulky-v-jednom-dotazu/#reply793801
damolh
verified
rating uzivatele
7. 8. 2012 15:35:13
Napsal Bedříšek;828670
jj.
CREATE TABLE IF NOT EXISTS `cms_articles` (
`article_id` int(11) NOT NULL AUTO_INCREMENT,
`author_id` int(11) NOT NULL,
`category_id` int(11) NOT NULL,
`is_published` int(1) NOT NULL DEFAULT '0',
`date_submitted` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`date_published` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`title` varchar(180) COLLATE utf8_czech_ci NOT NULL,
`body` text COLLATE utf8_czech_ci NOT NULL,
PRIMARY KEY (`article_id`),
KEY `category_id` (`category_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_czech_ci AUTO_INCREMENT=25 ;
CREATE TABLE IF NOT EXISTS `cms_comments` (
`comment_id` int(11) NOT NULL AUTO_INCREMENT,
`article_id` int(11) NOT NULL,
`user_id` int(11) NOT NULL,
`comment_date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`comment` text COLLATE utf8_czech_ci NOT NULL,
PRIMARY KEY (`comment_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_czech_ci AUTO_INCREMENT=18 ;
V článcích chci prohledávat sloupce title a body v komentářích jenom comment
7. 8. 2012 15:35:13
https://webtrh.cz/diskuse/vyhledavani-v-mysql-dve-tabulky-v-jednom-dotazu/#reply793800
Petr Zachrdla
verified
rating uzivatele
(1 hodnocení)
7. 8. 2012 15:38:16
Napsal damolh;828673
CREATE TABLE IF NOT EXISTS `cms_articles` (
`article_id` int(11) NOT NULL AUTO_INCREMENT,
`author_id` int(11) NOT NULL,
`category_id` int(11) NOT NULL,
`is_published` int(1) NOT NULL DEFAULT '0',
`date_submitted` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`date_published` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`title` varchar(180) COLLATE utf8_czech_ci NOT NULL,
`body` text COLLATE utf8_czech_ci NOT NULL,
PRIMARY KEY (`article_id`),
KEY `category_id` (`category_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_czech_ci AUTO_INCREMENT=25 ;
CREATE TABLE IF NOT EXISTS `cms_comments` (
`comment_id` int(11) NOT NULL AUTO_INCREMENT,
`article_id` int(11) NOT NULL,
`user_id` int(11) NOT NULL,
`comment_date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`comment` text COLLATE utf8_czech_ci NOT NULL,
PRIMARY KEY (`comment_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_czech_ci AUTO_INCREMENT=18 ;
V článcích chci prohledávat sloupce title a body v komentářích jenom comment
pak platí co psal 2NiNe nebo vlnk
EDIT: ať to můžeš uzavřít ;o) SELECT a.title, a.body, b.comment FROM cms_articles JOIN cms_commens ON a.article_id = b.article_id WHERE a.title LIKE '%retezec%' OR a.body LIKE '%retezec%' OR b.comment LIKE '%retezec%'
7. 8. 2012 15:38:16
https://webtrh.cz/diskuse/vyhledavani-v-mysql-dve-tabulky-v-jednom-dotazu/#reply793799
damolh
verified
rating uzivatele
7. 8. 2012 15:40:45
Napsal Bedříšek;828676
pak platí co psal 2NiNe nebo vlnk
ok, díky, jdu to pořešit
7. 8. 2012 15:40:45
https://webtrh.cz/diskuse/vyhledavani-v-mysql-dve-tabulky-v-jednom-dotazu/#reply793798
wader
verified
rating uzivatele
(7 hodnocení)
7. 8. 2012 15:46:20
Na ten %like% si dávej pozor, ať z toho není ve výsledku "performance killer". Možná zkus kouknout na http://php.vrana.cz/fulltextove-vyhledavani-v-mysql.php nebo Sphinx, pokud se jedná o větší projekt.
7. 8. 2012 15:46:20
https://webtrh.cz/diskuse/vyhledavani-v-mysql-dve-tabulky-v-jednom-dotazu/#reply793797
Pro odpověď se přihlašte.
Přihlásit