WN

WN (https://www.wn.se/forum/index.php)
-   Serversidans teknologier (https://www.wn.se/forum/forumdisplay.php?f=4)
-   -   Visa liknande titlar (https://www.wn.se/forum/showthread.php?t=1048691)

edgren 2011-06-16 01:58

Visa liknande titlar
 
Hej.

Jag försöker klura ut hur jag hämtar liknande titlar som har likadan genres som den titeln man är inne på för tillfället, men det går inte riktigt som jag vill. Min lösning visar inga liknande titlar alls, även att det finns 1 liknande.


PHP-kod:

$get_maybelike mysql_query("SELECT * FROM titles
                              WHERE id != '"
.$title['id']."'
                              AND post_genre_01 = '"
.(int)$genre1['id']."'

                              OR id != '"
.$title['id']."'
                              AND post_genre_02 = '"
.(int)$genre2['id']."'


                              ORDER BY post_name ASC
                             "
) or die(handle_sqlerror($filenamemysql_error()));


if(
mysql_num_rows($get_maybelike) == 0) {

    echo 
'<center>';
        echo 
'Inga liknande titlar kunde hittas';
    echo 
'</center>';

} else {

    
$fix 0;
    while(
$maybelike mysql_fetch_assoc($get_maybelike)) {
        
$fix++;

        
$get_maybelike_genre_01 mysql_query("SELECT * FROM title_genres
                                               WHERE id = '"
.(int)$maybelike['post_genre_01']."'
                                              "
) or die(handle_sqlerror($filenamemysql_error()));
        
$maybelike_genre1 mysql_fetch_assoc($get_maybelike_genre_01);

        
$get_maybelike_genre_02 mysql_query("SELECT * FROM title_genres
                                               WHERE id = '"
.(int)$maybelike['post_genre_02']."'
                                              "
) or die(handle_sqlerror($filenamemysql_error()));
        
$maybelike_genre2 mysql_fetch_assoc($get_maybelike_genre_02);


        if(
$title['post_genre_01'] == $maybelike_genre1['id']) {
            echo 
'<a href="'.url('sort/genre/'.strtolower($maybelike_genre1['post_name'])).'#showlist" class="tooltip" title="Sortera efter genren \'\'<b>'.$maybelike_genre1['post_name'].'</b>\'\'">';
                echo 
$maybelike_genre1['post_name'];
            echo 
'</a>';

            echo 
'<label>&nbsp;&&nbsp;</label>';
        }

        if(
$title['post_genre_02'] == $maybelike_genre2['id']) {
            echo 
'<a href="'.url('sort/genre/'.strtolower($maybelike_genre2['post_name'])).'#showlist" class="tooltip" title="Sortera efter genren \'\'<b>'.$maybelike_genre2['post_name'].'</b>\'\'">';
                echo 
$maybelike_genre2['post_name'];
            echo 
'</a>';
        }

        echo 
'<label>:&nbsp; &nbsp;</label>';

        echo 
'<a href="'.url('info/'.(int)$maybelike['id']).'" class="tooltip" title="">';
            echo 
$maybelike['post_name'];
        echo 
'</a>';


        echo 
mysql_num_rows($get_maybelike) != $fix '<br>' '';
    }




Kan ni se vad som är problemet måntro? Hade varit tacksam för ett snabbt svar.

Tack på förhand.

Reconsider 2011-06-16 08:17

Ganska svårt att avgöra utan att se data, en dump av titles & title_genres med de berörda raderna hade hjälpt.

Och vart landar du..? På "echo 'Inga liknande titlar kunde hittas';" eller?
Utan data är det inte lätt för en utomstående att avgöra.

edgren 2011-06-21 23:32

Tack för ditt svar, Reconsider.

Japp, jag landar på "Inga liknande titlar kunde hittas". Om du menar hur SQL'n för titles och title_genres ser ut, så kommer den här:

Kod:

CREATE TABLE IF NOT EXISTS `titles` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'Avser titelns ID-nummer',
  `id_user` int(11) NOT NULL DEFAULT '0' COMMENT 'Avser besökarens ID-nummer',
  `id_editor` int(11) NOT NULL DEFAULT '0' COMMENT 'Avser besökarens ID-nummer som ändrade titeln',
  `id_youtube` varchar(15) NOT NULL COMMENT 'Visar ID-numret till trailer på YouTube',
  `id_imdb` varchar(9) NOT NULL COMMENT 'Avser ID-numret från IMDb',
  `post_name` text NOT NULL COMMENT 'titelns namn',
  `post_url_review` text NOT NULL COMMENT 'Visar direktlänken till recensionen för filmen, TV, eller TV-serien',
  `post_category` int(11) DEFAULT NULL COMMENT 'Avser kategorins ID-nummer',
  `post_genre_01` int(11) DEFAULT NULL COMMENT 'Avser ID-numret för genre nr. 1',
  `post_genre_02` int(11) DEFAULT NULL COMMENT 'Avser ID-numret för genre nr. 2',
  `post_description` text NOT NULL COMMENT 'titeln beskrivning',
  `post_description_own` text NOT NULL COMMENT 'Besökarens egna beskrivning',
  `date_published` datetime NOT NULL COMMENT 'Visar när titeln lades till',
  `date_edited` datetime NOT NULL COMMENT 'Visar när titeln ändrades',
  `count_downloads` int(11) DEFAULT NULL COMMENT 'Räknar antalet nedladdningar',
  `info_ipaddress` text NOT NULL COMMENT 'Visar IP-adressen som tillhör den som la till titeln',
  `info_ipaddress_editor` text NOT NULL COMMENT 'Visar IP-adressen som tillhör den som ändrade titeln',
  `info_imdb_cover` text NOT NULL COMMENT 'IMDb - Visar omslagsbilden',
  `info_imdb_year` bigint(4) DEFAULT NULL COMMENT 'IMDb - Visar årtalet',
  `info_imdb_runtime` int(11) DEFAULT NULL COMMENT 'IMDb - Visar längden',
  `info_imdb_rating` decimal(10,1) NOT NULL COMMENT 'IMDb - Visar betygen',
  `people_writer_01` text NOT NULL COMMENT 'Författare #1',
  `people_writer_02` text NOT NULL COMMENT 'Författare #2',
  `people_actor_01` text NOT NULL COMMENT 'Skådespelare #1',
  `people_actor_02` text NOT NULL COMMENT 'Skådespelare #2',
  `people_actor_03` text NOT NULL COMMENT 'Skådespelare #3',
  `people_actor_04` text NOT NULL COMMENT 'Skådespelare #4',
  `people_actor_05` text NOT NULL COMMENT 'Skådespelare #5',
  PRIMARY KEY (`id`),
  UNIQUE KEY `id` (`id`),
  FULLTEXT KEY `post_name` (`post_name`)
)



CREATE TABLE IF NOT EXISTS `title_genres` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'Avser genrerns ID-nummer',
  `id_title` int(11) NOT NULL DEFAULT '0' COMMENT 'Avser titelns ID-nummer',
  `id_user` int(11) NOT NULL DEFAULT '0' COMMENT 'Avser besökarens ID-nummer',
  `id_editor` int(11) NOT NULL DEFAULT '0' COMMENT 'Avser besökarens ID-nummer som ändrade titeln',
  `post_name` text NOT NULL COMMENT 'Titelns namn',
  `date_published` datetime NOT NULL COMMENT 'Visar när titeln lades till',
  `date_edited` datetime NOT NULL COMMENT 'Visar när titeln ändrades',
  `info_ipaddress` text NOT NULL COMMENT 'Visar IP-adressen som tillhör den som la till titeln',
  `info_ipaddress_editor` text NOT NULL COMMENT 'Visar IP-adressen som tillhör den som ändrade titeln',
  PRIMARY KEY (`id`),
  UNIQUE KEY `id` (`id`)
)


Reconsider 2011-06-22 00:50

Eftersom du använder dig av INT tror jag inte det är bra att placera '' runt datan..

Sen hade jag väl lagt upp det såhär istället..
PHP-kod:

$get_maybelike mysql_query("SELECT * FROM titles
                              WHERE id != "
.$title['id']."
                              AND (post_genre_01 = "
.(int)$genre1['id']."
                              OR post_genre_02 = "
.(int)$genre2['id'].")

                              ORDER BY post_name ASC
                             "
) or die(handle_sqlerror($filenamemysql_error())); 

Dvs. utnyttja () annars blir din case konstig. Samma sak som i PHP.

Du hade WHERE villkor1 AND villkor2 OR villkor1 AND villkor3
Genom att lägga in () delar du upp det till WHERE (villkor1 AND villkor2) OR (villkor1 AND villkor3)
Dock förkortade jag också ledet genom att eliminera andra placeringen av villkor1.

edgren 2011-06-22 02:37

Tack för ditt snabba svar, Reconsider :)

Jag testade att lägga in din lösning, men jag får fortfarande samma "fel" som jag skrev i mitt förra inlägg. När jag valde att eka ut SQL-frågan, blev resultatet såhär: SELECT * FROM titles WHERE id != 1 AND (post_genre_01 = 17 OR post_genre_02 = 19) ORDER BY post_name ASC

Jag var då inne på informations-sidan om titeln som har ID-numret 1, som i sin tur har ID-numren 17 (drama) och 19 (romantik) för genren. Det finns en till titel inlagd i databasen, som stämmer överrens med genren drama, men denna vill inte visas.

Reconsider 2011-06-22 10:41

Inte så att du har genre_01 och genre_02 "tvärtom" mot hur du egentligen tänker?

Kanske menar du egentligen SELECT * FROM titles WHERE id != 1 AND (post_genre_01 = 17 OR post_genre_02 = 19 OR post_genre_01 = 19 or post_genre_02 = 17) ORDER BY post_name ASC

allstars 2011-06-22 12:55

används "field != value " i SQL?

är det inte "field NOT IS value" eller "field<> value"

edgren 2011-06-22 13:16

Citat:

Ursprungligen postat av Reconsider (Inlägg 20409368)
Inte så att du har genre_01 och genre_02 "tvärtom" mot hur du egentligen tänker?

Kanske menar du egentligen SELECT * FROM titles WHERE id != 1 AND (post_genre_01 = 17 OR post_genre_02 = 19 OR post_genre_01 = 19 or post_genre_02 = 17) ORDER BY post_name ASC

Underbart! Nu funkar det äntligen! :D Tusen tack! Var dock tvungen att modifiera din lösning lite, annars skulle den inte visa något alls typ.

Kod:

SELECT * FROM titles WHERE id != '".$title['id']."' AND post_genre_01 = '".(int)$genre1['id']."' OR id != '".$title['id']."' AND post_genre_02 = '".(int)$genre2['id']."' OR id != '".$title['id']."' AND post_genre_01 = '".(int)$genre2['id']."' OR id != '".$title['id']."' AND post_genre_02 = '".(int)$genre1['id']."' ORDER BY post_name ASC

dAEk 2011-06-23 21:37

Citat:

Ursprungligen postat av allstars (Inlägg 20409392)
används "field != value " i SQL?

är det inte "field NOT IS value" eller "field<> value"

is not används för att jämföra med nullvärden.
!= är icke-ANSI-varianten av <> men en del databaser har stöd för den operatorn också.


Alla tider är GMT +2. Klockan är nu 08:07.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson