No0ne Posted September 19, 2011 Report 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
larvae Posted September 19, 2011 Report 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
No0ne Posted September 19, 2011 Author Report 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
xPtv45z Posted September 20, 2011 Report Posted September 20, 2011 LEFT JOIN ... ON ... AND lietotāja_id=bookmarku_lietototāja_id Quote
No0ne Posted September 20, 2011 Author Report 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
No0ne Posted September 20, 2011 Author Report Posted September 20, 2011 Joprojām neesmu ticis galā. Ir kādam idejas? Quote
xPtv45z Posted September 20, 2011 Report 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
No0ne Posted September 20, 2011 Author Report 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
No0ne Posted September 20, 2011 Author Report 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
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.