No0ne Posted September 19, 2011 Report Share Posted September 19, 2011 (edited) Nedaudz apjuku, gribēju tādu tā kā bookmarku sistēmu ieviest, pievienoties datubāzē viss pievienojas labi, bet tagad sāku domāt kā lai nolasa.. Datubāzē ir tabulas bookmarks, 2 kolonnas - lietotajs un video, kur norada katra ID. Tagad es gribu parādīt katram lietotājam visas filmas, taa lai pie bookmarkotajaam buutu plusins un pie tam, kuras nav bookamrkos minusins. SELECT `online-video`.`id`, `online-video`.`seolinks`, `online-video`.`bilde`, `online-video`.`imdb_vertejums`, `online-bookmarks`.`filma`, `online-bookmarks`.`lietotajs` FROM `online-video` LEFT JOIN `online-bookmarks` ON `online-bookmarks`.`filma` = `online-video`.`id` WHERE (`blocked1` = '0' OR (`blocked2` = '0' AND `link2` != '')) AND `aktivs` = 'yes' kaut ko nepareizi esmu uzrakstijis, jo, ja ieks bookmarkiem ir 5 lietotaji pievienojusi vienu un to pasu filmu, tad vina 5x paradas. ka butu pareizak? Edited September 19, 2011 by No0ne Quote Link to comment Share on other sites More sharing options...
larvae Posted September 19, 2011 Report Share Posted September 19, 2011 Lauks 'imdb_vertejums' ir klaja melošana lietotājam, ja nenorāda uz kuru konkrēto laika momentu tas ir. Bieži vien ir filmas ar nieka pārsimt balsīm un vidējo vērtējumu, piemēram, 8.2, bet filma ir laža baisākā. Atgriežoties pie jautājuma - WHERE nosacījumā nav lietotājs norādīts. Quote Link to comment Share on other sites More sharing options...
No0ne Posted September 19, 2011 Author Report Share Posted September 19, 2011 Jā, bet es gribu parādīt visas filmas un tad ar PHP tās, kuras atgriež bookmarku atsevišķi atzīmēt. Ja norādu where lietotajs = 123, tad man atgriež tikai filmas, kuras esmu ielicis bookmarkos. Par IMDB varu teikt, ka šajā gadījumā tā noteikti nebūs klaja melošana lietotājiem, tieši tāpēc ir atsevišķs lauks, nevis vienkārši aprakstā iekopēts gadu vecs IMDB vērtējums ;) Quote Link to comment Share on other sites More sharing options...
xPtv45z Posted September 20, 2011 Report Share Posted September 20, 2011 LEFT JOIN ... ON ... AND lietotāja_id=bookmarku_lietototāja_id Quote Link to comment Share on other sites More sharing options...
No0ne Posted September 20, 2011 Author Report Share Posted September 20, 2011 SELECT `online-video`.`id`, `online-video`.`seolinks`, `online-video`.`bilde`, `online-video`.`imdb_vertejums`, `online-bookmarks`.`filma`, `online-bookmarks`.`lietotajs` FROM `online-video` LEFT JOIN `online-bookmarks` ON `online-bookmarks`.`filma` = `online-video`.`id` [b]AND [/b][b]`online-bookmarks`.`lietotajs`[/b][b] = '244863'[/b] WHERE (`blocked1` = '0' OR (`blocked2` = '0' AND `link2` != '')) AND `aktivs` = 'yes' ORDER BY `online-bookmarks`.`lietotajs` ASC Arī nebūs, gan visas filmas, gan lietotajus tagad atgriezj kā NULL. Un, jā, ir tāds lietotāja id iekš online-bookmarks tabulas. Quote Link to comment Share on other sites More sharing options...
No0ne Posted September 20, 2011 Author Report Share Posted September 20, 2011 Joprojām neesmu ticis galā. Ir kādam idejas? Quote Link to comment Share on other sites More sharing options...
xPtv45z Posted September 20, 2011 Report Share Posted September 20, 2011 Ja tev ir visi dati tabulās, tad tam pēdējam vajadzētu strādāt. Ja noņem Left join, video atlasās? Parādi, kādi tev dati tabulās, kaut vai tikai to daļu, kam vajadzētu atlasīties. Šis ir lieki SELECT `online-video`.`id`, ... `online-bookmarks`.`filma`, jo abi lauki satur vienu un to pašu vērtību, līdz ar to online-bookmarks.filma var ņemt arā. Left Join gadījumā tur nevienmēr būs vērtība, atšķirībā no online-video.id Quote Link to comment Share on other sites More sharing options...
No0ne Posted September 20, 2011 Author Report Share Posted September 20, 2011 OK, atmetam dubultu nevajadzigu selektu (paldies), sanak: <pre class="prettyprint">SELECT `online-video`.`id`, `online-video`.`seolinks`, `online-video`.`bilde`, `online-video`.`imdb_vertejums`, `online-bookmarks`.`lietotajs`FROM `online-video` LEFT JOIN `online-bookmarks` ON `online-bookmarks`.`filma` = `online-video`.`id` AND `online-bookmarks`.`lietotajs` = '244863'WHERE (`blocked1` = '0' OR (`blocked2` = '0' AND `link2` != '')) AND `aktivs` = 'yes' ORDER BY `online-bookmarks`.`lietotajs` ASC</pre> strādā arī ar left join, tikai, ja pieliek to, ko tu teici AND lietotajs.., tad gan bookmarks.filma, gan bookmarks.lietotajs radas NULL Par strukturu un laukiem: INSERT INTO `online-bookmarks` (`filma`, `lietotajs`) VALUES(316, 244863), (315, 244863), (444, 244863), (443, 244863), (454, 244863), (453, 244863), (452, 244863), (451, 244863), (431, 0); nu un online-video izskatas sadi tie lauki http://img835.imageshack.us/img835/723/ss20110920194621.png Quote Link to comment Share on other sites More sharing options...
No0ne Posted September 20, 2011 Author Report Share Posted September 20, 2011 hmm, wow uzrakstiju to visu un tagad, izdomaju papildus skrinshotu uztaisit, ka ari konkreti pie tiem ID radas NULL, bet ta skatos, ka raadaas kaa vajag. Jutos nedaudz viilies phpmyadminaa, jo to, ka visur radas NULL, es pieneemu, meginot sarindot `lietotajs` augosi/dilstosi, bet tapat radijas tikai NULL, kaut gan 3ajaa lapaa tomer bija skaitlis. Paldies, skiet, ka pagaidam bus ok :) Quote Link to comment Share on other sites More sharing options...
daGrevis Posted September 20, 2011 Report Share Posted September 20, 2011 Iesaku Navicat. Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.