Jump to content
php.lv forumi

Apjuku ar mysql queryu


No0ne

Recommended Posts

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 by No0ne
Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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 ;)

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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 :)

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...