kostenloser Webspace werbefrei: lima-city


orderby Problem

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    effektfabrik

    effektfabrik hat kostenlosen Webspace.

    Also ich habe gerade ein neues Projekt angefangen eine kleine Movie-Database mit Filmkritiken von mir. Dafür nutze ich Wordpress mit einem angepasstem Theme, Custom Taxonomys usw.
    In der Sidebar gibt es ein Ranking für die fünf besten Filme. Beim ursprünglichen Theme war nur eine Bewertung bis 5 vorgesehen, ich habe diese Bewertung bis auf 10 erweitert. Jedoch habe ich jetzt das Problem, dass er bis 9 die Filme richtig sortiert, jedoch Filme mit Bestwertung 10 nicht als höchstes festlegt, da die Zahl vermutlich ja mit 1 beginnt.

    <div class="featbox">
    <h3 class="sidetitl "> Top Movies </h3>
    <?php
    $rate_query =  new WP_Query( array ( 'post_type' => 'movies', 'orderby' => 'meta_value', 'meta_key' => 'wtf_rscore','posts_per_page'=>'5' ) );
    while ( $rate_query->have_posts() ) : $rate_query->the_post();
    ?>
    
    <div class="fblock clearfix">
    	<?php
    		if ( has_post_thumbnail() ) { ?>
    			<img class="thumbim" src="<?php bloginfo('stylesheet_directory'); ?>/timthumb.php?src=<?php get_image_url(); ?>&amp;h=60&amp;w=80&amp;zc=1" alt=""/>
    	<?php } else { ?>
    			<img class="thumbim" src="<?php bloginfo('template_directory'); ?>/images/dummy.png" alt="" />
    	<?php } ?>
    	
    	<div class="rinfo clearfix">	
    	<h3><a href="<?php the_permalink() ?>" title="<?php the_title(); ?>"><?php echo short_title('...', 4); ?></a></h3>
    		<span class="sholder"> <span class="scorebar score-<?php $rscore=get_post_meta($post->ID, 'wtf_rscore', true); echo $rscore; ?>"> </span>    </span>
    	<p><span class="mgenre"><?php echo get_the_term_list( $post->ID, 'movie-genre', '', ', ', '' ); ?></span></p>
    	</div>
    </div>
    <?php endwhile; ?>
    </div>


    Das dazugehörige Array sieht so aus:
    $meta_box = array(
    	'id' => 'boxoffice',
    	'title' => 'Movie review details',
    	'page' => 'movies',
    	'context' => 'normal',
    	'priority' => 'high',
    	'fields' => array(
    			array(
    			'name' => 'Jahr der Ver&ouml;ffentlichung',
    			'desc' => 'Füge das Jahr ein, indem der Film ver&ouml;ffentlicht wurde ',
    			'id' => $prefix . 'ryear',
    			'type' => 'text',
    			'std' => ''
    		),
    
    			
    		array(
    			'name' => 'Regie',
    			'desc' => 'Name des Regisseurs',
    			'id' => $prefix . 'dirctr',
    			'type' => 'text',
    			'std' => ''
    		),	
    
    		array(
    			'name' => 'Schauspieler',
    			'desc' => 'Namen der Schauspieler',
    			'id' => $prefix . 'stars',
    			'type' => 'text',
    			'std' => ''
    		),			
    		
    		array(
    			'name' => 'Laufzeit',
    			'desc' => 'Laufzeit des Films in Minuten',
    			'id' => $prefix . 'runtime',
    			'type' => 'text',
    			'std' => ''
    		),		
    
    		array(
    			'name' => 'Video trailer',
    			'desc' => 'Video trailer url',
    			'id' => $prefix . 'video',
    			'type' => 'textarea',
    			'std' => ''
    		),	
    		
    		array(
    			'name' => 'Deine Filmbewertung',
    			'desc' => 'Deine Filmbewertung von 1-10',
    			'id' => $prefix . 'rscore',
    			'type' => 'select',
    			'options' => array(	'1','2','3','4','5','6','7','8','9','10' ),
    			'std' => ''
    		)
    
    		
    	),
    	
    );


    In Aktion könnt ihr das ganze hier sehen:http://effektfabrik.lima-city.de/
    Also wie kriege ich das jetzt hin, dass er Filme mit der Bewertung 10 an oberster Stelle sortiert.

  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. hackyourlife

    Moderator Kostenloser Webspace von hackyourlife

    hackyourlife hat kostenlosen Webspace.

    Dieses Verhalten tritt auf wenn über Zeichenfolgen und nicht über Zahlen sortiert wird. Ich kann dir jetzt aber keine Fehlerbehebung vorschlagen.
    Das einzige was ich dir sicher sagen kann ist, dass bei der Bewertung ein Zahlen-Datentyp hingehört, damit richtig sortiert werden kann.
  4. Autor dieses Themas

    effektfabrik

    effektfabrik hat kostenlosen Webspace.

    hackyourlife schrieb:
    Das einzige was ich dir sicher sagen kann ist, dass bei der Bewertung ein Zahlen-Datentyp hingehört, damit richtig sortiert werden kann.


    Genau das habe ich mir auch gedacht, doch habe ich es weder direkt als Text deklariert noch weiß ich an welcher Stelle ich das Format einstelle und wie die Syntax dafür aussieht.
    Habe schon ein bisschen gegoogelt, habe aber noch nicht das richtige gefunden. Vielleicht hat jemand noch einen kleinen Denkanstoss.
  5. christianwege

    christianwege hat kostenlosen Webspace.

    Hi,

    ich nehme mal jetzt an, dass dein Tabellen-Feld in der Datenbank das falsche Format hat.
    Wie schon agesprochen wurde, musst du den Typ auf INTEGER umstellen.
    Das solltest du unter phpMyAdmin ohne Probleme ändern können.

    Wie sieht denn deine Tabelle bisher aus?
  6. Autor dieses Themas

    effektfabrik

    effektfabrik hat kostenlosen Webspace.

    Ja also ich habe jetzt ein bisschen was ausprobiert:

    du hattest recht: meta_value hat das format longtext
    da aber meta_value nicht nur die Bewertungen von 1-10 beinhaltet, sondern noch die anderen Meta-Dateien sprich, Erscheinungsjahr, URLs, Schauspieler, Regiedaten etc. kann ich nicht einfach das Datenformat der Spalte ändern.

    Deswegen habe ich folgendes gemacht.

    1. ALTER table wp_postmeta ADD meta_value2 tinyint
    2. UPDATE wp_postmeta SET `meta_value2` =`meta_value` WHERE `meta_key`="wtf_rscore"

    So nun habe ich eine weitere Spalte meta_value2 mit den Daten aus meta_value, jedoch überall da wo es kein wtf_rscore gibt ist der Standardwert NULL eingetragen und an den Stellen wo es für meta_key = wtf_rscore den Score mit dem richtigen Datenformat eingetragen ist.

    Nun habe ich in der sidebar.php

    einfach folgendes abgeändert:

    <div class="featbox">
    <h3 class="sidetitl "> Top Movies </h3>
    <?php
    $rate_query =  new WP_Query( array ( 'post_type' => 'movies', 'orderby' => 'meta_value2', 'meta_key' => 'wtf_rscore','posts_per_page'=>'5' ) );
    while ( $rate_query->have_posts() ) : $rate_query->the_post();
    ?>


    Also gleich zu Anfang habe ich einfach meta_value mit meta_value2 ausgetauscht.
    Nun aktualisiere ich die sidebar.php per FTP und gucke ob ich einen Effekt erzielt habe und siehe da... Nope!!!
    Nun ist das ganze unsortiert! Er zeigt mir einfach die Bewertungen der letzten 5 Filmeinträge. WTF!

    Steh schon wieder auf dem Schlauch.

    Edit:
    Habe folgendes zum Thema gefunden:
    http://bueltge.de/wordpress-query-quick-tipps/717/

    unter "Loop auf Basis benutzerdefinierten Felder, der die nach diesen sortiert":

    query_posts('meta_key=my_type&meta_compare=<=&my_value=20&orderby=my_value');
    if (have_posts()) :
    while ( have_posts() ) : the_post(); ?>


    Wie muss ich meine Form anpassen?

    Edit2:
    nochwas gefunden: http://codex.wordpress.org/Class_Reference/WP_Query

    Order & Orderby Parameters
    'meta_value' - Note that a 'meta_key=keyname' must also be present in the query. Note also that the sorting will be alphabetical which is fine for strings (i.e. words), but can be unexpected for numbers (e.g. 1, 3, 34, 4, 56, 6, etc, rather than 1, 3, 4, 6, 34, 56 as you might naturally expect).

    'meta_value_num' - Order by numeric meta value (available with Version 2.8). Also note that a 'meta_key=keyname' must also be present in the query. This value allows for numerical sorting as noted above in 'meta_value'.

    Also muss ich einfach mal mit meta_value_num ausprobieren!

    Und YEAH es hat geklappt:

    <?php
    $rate_query =  new WP_Query( array ( 
    'post_type' => 'movies', 
    'orderby' => 'meta_value_num',
    'meta_key' => 'wtf_rscore',
    'posts_per_page'=>'5' ) );
    while ( $rate_query->have_posts() ) : $rate_query->the_post();
    ?>



    Beitrag zuletzt geändert: 7.2.2012 14:03:36 von effektfabrik
  7. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!