Autor | Zpráva | ||
---|---|---|---|
lopikol Profil |
#1 · Zasláno: 10. 1. 2012, 19:57:15 · Upravil/a: lopikol
Vytvořil jsem jednoduchou tabulku kvůli demonstraci.
-- Adminer 3.3.3 MySQL dump SET NAMES utf8; SET foreign_key_checks = 0; SET time_zone = 'SYSTEM'; SET sql_mode = 'NO_AUTO_VALUE_ON_ZERO'; DROP TABLE IF EXISTS `data`; CREATE TABLE `data` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` tinytext NOT NULL, `id_score` tinytext NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1; INSERT INTO `data` (`id`, `name`, `id_score`) VALUES (1, 'aa', '1'), (2, 'bb', '2'), (3, 'cc', '1'), (4, 'dd', '2'), (5, 'ee', '3'), (6, 'ff', '1'), (7, 'gg', '1'); DROP TABLE IF EXISTS `score`; CREATE TABLE `score` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` tinytext NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1; INSERT INTO `score` (`id`, `name`) VALUES (1, 'vyborne'), (2, 'dobre'), (3, 'spatne'); DROP TABLE IF EXISTS `user`; CREATE TABLE `user` ( `id_user` int(11) NOT NULL, `id_data` int(11) NOT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1; INSERT INTO `user` (`id_user`, `id_data`) VALUES (1, 1), (1, 2), (1, 3), (1, 4), (2, 3), (2, 5), (2, 4); -- 2012-01-10 19:49:39 SQL příkaz k upravení: SELECT COUNT(D.id) AS count, D.id, D.name, U.id_user AS see FROM `data` D LEFT JOIN `score` S ON S.id = D.id_score LEFT JOIN `user` U ON U.id_data = D.id GROUP BY `D`.`id` ORDER BY `D`.`name` Tento sql příkaz vypíše všechy řádky z tabulky data a připojí potřebné tabulky. Tabulka data má 7 záznamů a pokud je uživatel přihlášen, tak potřebuji připojit tabulku user s jeho ID (vyřešeno) a nějak označit data, která viděl. Nabízí se kluzule WHERE U.id_user = 1
Jenže pokud přidám WHERE, tak se vypíše jen počet záznamů, které viděl, tedy 4 místo všech 7 možných. Představuji si to tak, že vypíše všechny řádky z tabulky data a pokud je možné připojit uživatele s ID 1 k danému řádku (daná data viděl), tak ho připojí a napíše např TRUE, jinak FALSE. Obrázek pro ilustraci: http://ukaz.at/1yu |
||
Tori Profil |
#2 · Zasláno: 10. 1. 2012, 20:23:39 · Upravil/a: Tori
Zkuste tohle:
SELECT U.`id_data` IS NOT NULL AS 'videl', D.`id`, D.`name` FROM `data` D LEFT JOIN `score` S ON S.`id` = D.`id_score` LEFT JOIN `user` U ON U.`id_data` = D.`id` AND U.`id_user` = $id_prihlaseneho_uzivatele ORDER BY D.`name` |
||
lopikol Profil |
#3 · Zasláno: 10. 1. 2012, 22:31:40
Díky moc za radu, je to ono :)
Tohle byla jen ukázková DB, využití bude jinde. |
||
Časová prodleva: 12 let
|
0