Problem bei der Durchsuchung eines Strings

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Problem bei der Durchsuchung eines Strings

    Hallo zusammen,

    aus der Datenbank hole ich folgenden Wert:

    PHP-Code:
    1,2,3,78,11,17 
    Nun wollte ich mittels: PHP: strpos - Manual das Ergebnis durchsuchen lassen, ob ein mein Wert enthalten ist:

    PHP-Code:
    $meinString '1,2,3,78,11,17';
    $findMich   '1';
    $pos strpos($meinString$findMich);

    if (
    $pos === false) {
        echo 
    "Der String '$findMich' wurde nicht im String '$meinString' gefunden";
    } else {
        echo 
    "Der String '$findMich' wurde im String '$meinString' gefunden";
        echo 
    " und befindet sich an Position $pos";

    Als ergebnis erhalte ich aber:
    Code:
    Der String '1' wurde im String '1,2,3,78,11,17' gefunden und befindet sich an Position 0
    ich nehme an, er findet jede 1, also auch 11 und 17.

    gibt es eine möglichkeit eindeutig zu eritteln, ob meine zahl enthalten ist?

    danke schonmal und einen schönen sonntag

  • #2
    aus der Datenbank hole ich folgenden Wert:

    1,2,3,78,11,17
    Values haben atomar zu sein.
    Also ein klarer Verstoß gegen die erste Normalform.

    A Visual Explanation of SQL Joins
    SQL und relationale Algebra
    Die 5 Normal Formen


    Und wenn du weiter mit diesem Fehler leben willst, Google("mysql find_in_set()")
    Wir werden alle sterben

    Kommentar


    • #3
      Das Problem sind schon die Daten in der Datenbank. Kommaseparierte Werte haben in der Datenbank nichts verloren. Du solltest dein Datenbankdesign reparieren.

      Kommentar


      • #4
        mein gedanke war der:

        ich habe eine kategorie-tabelle mit den folgenden werten:

        id | name
        1 | google
        2 | heise
        3 | intern

        usw.

        nun schreibe ich in meine content tabelle einen eintrag ala
        id | headline | datetime | content | categorys
        1 | testeintrag | 2012-08-06 11:13 | blabla | 1,3

        1,3 sind dabei die ids, der kategorien aus der anderen tabelle.

        wenn mein vorgehen falsch ist, kann mir jemand sagen, wie es richtig wäre? es sollte aber erhalten bleiben, dass man den wert von 1 aus kategorie tabelle anpassen kann, den namen in die content tabelle zu schreiben macht also keinen sinn.

        Kommentar


        • #5
          Du brauchst noch eine Tabelle content_category mit den Spalten content_id und category_id. Du hättest dann zwei Datensätze:

          content_id | category_id
          1 | 1
          1 | 3

          Kommentar


          • #6
            Warum ignorierst du meine Links?


            Das ist eine klassische "N:M Relation"
            Googel wird dich mit Ergebnissen erschlagen.
            Wir werden alle sterben

            Kommentar


            • #7
              @combie: ich ignoriere deine links nicht, mein problem ist nur, das ich kein großer theoretiker bin, sondern gerne mit praxisnahen beispielen arbeite.
              ich werde mich bei zeiten schlau machen.

              @h3ll: danke, ich habe das versucht nun umzusetzen:
              die sql habe ich erstellt. mittels:

              PHP-Code:
                  public function categoryFetchData($id) {
                      
              $category_array "";
                      
              $db_result $this->database->runSQLQuery("SELECT * FROM ".GLOBAL_CATEGORY_CONTENT_DB." WHERE content_id = '".$id."' ");
                      while(
              $row mysql_fetch_array($db_resultMYSQL_ASSOC)) {
                          
              $category_name_sql $this->database->runSQLQuery("SELECT category_name FROM ".GLOBAL_CATEGORY_DB." WHERE id = '".$row['category_id']."' ");
                          
              $category_name mysql_fetch_array($category_name_sqlMYSQL_ASSOC);
                          
              $category_array[] = array(
                              
              'id' => $id,
                              
              'content_id' => $row['content_id'],
                              
              'category_name' => $category_name['category_name'],
                          );
                      }
                      return 
              $category_array;
                  } 
              bekomme ich nun die benötigten informationen.

              jetzt stehe ich vor einem neuen problemen.

              die ganze abfrage ist an ein template gebunden.
              mein problem ist nun, wie kombiniere ich die abfrage des contents, welches ein array erzeugt, mit dem array, welches ich von den categorys zurück erhalte?

              PHP-Code:
                  public function fetchContenData($id false) {
                      
              $content_array = array();

                      
              $db_result $this->database->runSQLQuery("
                          SELECT *,
                          DATE_FORMAT(date, '%d.%m.%Y') AS date_format,
                          DATE_FORMAT(date, '%H:%i:%s') AS time_format FROM "
              .GLOBAL_CONTENT_DB."
                          "
              .($id !== false ' WHERE id = ' $id '')."
                          ORDER by date DESC"
              );
                      while(
              $row mysql_fetch_array($db_resultMYSQL_ASSOC)) {
                          
              $comments_count mysql_num_rows($this->database->runSQLQuery("SELECT * FROM ".GLOBAL_COMMENTS_DB." WHERE id_content LIKE '".$row['id']."' AND state = '1' "));
                          
              $state_name $this->state->Pull_State_Name($row['state']);
                          
              $author_name $this->user->Pull_Author_Name($row['id_author']);
                          
              $content_array[] = array(
                              
              'id' => $row['id'],
                              
              'author_name' => $author_name,
                              
              'headline' => $row['headline'],
                              
              'date' => $row['date_format'],
                              
              'time' => $row['time_format'],
                              
              'content' => $row['content'],
                              
              'state' => $row['state'],
                              
              'state_name' => $state_name,
                              
              'comments' => $comments_count,
                          );
                      }
                      return 
              $content_array;
                  } 
              das template dazu:
              HTML-Code:
                  <div id="content">
                      <div id="testimonials">
                      <? for($x=0; $x<count($TPL['content_array']); $x++): ?>
                          <? if($TPL['content_array'][$x]['state'] > "0") { ?>
                          <h3><?=$TPL['content_array'][$x]['headline']?></h3>
                          <div class="testimonial">
                              <p>
                                  <em><?=$TPL['content_array'][$x]['date']?> <?=$TPL['content_array'][$x]['time']?> | Author: <?=$TPL['content_array'][$x]['author_name']?></em><br />
                                  <span class="author"><?=nl2br($this->linker->Change_Links($TPL['content_array'][$x]['content']))?></span>
                                  <br />
                                  <em>Kommentare: <a href="?nav=comments&id=<?=$TPL['content_array'][$x]['id']?>"> <?=$TPL['content_array'][$x]['comments']?> </a></em><br />
                                  Tags: <br />
                              </p>
                          </div>
                          <? } ?>
                          <? endfor; ?>
                      </div>
                  </div>

              Kommentar


              • #8
                Verstehe ich das Richtig?
                Du willst die Spalten von der Content ID haben UND die Spalten von der Category ID, UND das ganze möglichst zusammen passend in jeweils einer Zeile?

                Also:
                ContentId, Content Spalten... CategoryId, Category Spalten...
                in einer Zeile
                Wer keine Arbeit hat, der macht sich welche
                XAMPP + NetBeans + XDebug(Xampp included) + SVN == FUN

                Kommentar


                • #9
                  mein projekt ist ein cms. eine art blog.
                  ich wollte nun zu meinen cms-einträgen entsprechende kategorien zum filtern anlegen. und diese meinen content-einträgen zuweisen.

                  mein problem konnte ich im template wie folgt lösen:

                  PHP-Code:
                  Kategorien: <? foreach($TPL['content_array'][$x]['category'] as $t)echo " ".$t['category_name'];?>

                  Kommentar

                  Lädt...
                  X