2010-10-21 9 views
0

Je sais que je suis assez proche de cela, car j'ai reçu de l'aide sur ce sujet plus tôt, mais quand il s'agit de faire fonctionner le même code pour une autre partie du site, je ne peux pas le faire fonctionner à nouveau.Petit problème pour faire fonctionner mySQL SUBSTRING

Ce que je fais est d'essayer d'obtenir la première partie d'une chaîne (qui est rompu par un séparateur - dans la base de données) pour que l'entrée db slug serait foo-bar-rules, je dois saisir foo de cette chaîne où slug est pas égal à foo-bar-rules mais égal à phoo-bar-rules ou feuw-bar-rules. Je suis désolé si mon explication n'était pas très utile, j'ai eu du mal à m'expliquer: D.

Merci à quelqu'un avance qui peut me aider ..

<?php define ('PAGEPARENT', 'foo'); 
     define ('PAGECHILD', 'bar'); 
     define ('PAGEGRANDCHILD', 'rules'); 

    switch (PAGEGRANDCHILD) { 
     case PAGEGRANDCHILD: 
      $pageGrandChild = PAGEGRANDCHILD; 
      $rangeRelationResult = mysql_query("SELECT DISTINCT SUBSTRING(slug, 1, INSTR(slug, '-') - 1) result 
               FROM web_navbar_links 
               WHERE SUBSTRING(slug FROM INSTR(slug, '-".PAGECHILD."-') + 1) = '$pageGrandChild' 
               AND grandchild = 1 
               AND slug != '".PAGEPARENT."-".PAGECHILD."-".PAGEGRANDCHILD."'; 
               "); 
      while ($rangeRelationRow = mysql_fetch_object($rangeRelationResult)) { ?> 
       <a href="?page=<?php echo $rangeRelationRow->result."-".PAGECHILD."-".PAGEGRANDCHILD; ?>&pageLevel=<?php echo $_GET['pageLevel']; ?>" title="<?php echo PAGEGRANDCHILD."&nbsp;for&nbsp;".$rangeRelationRow->result; ?>"><div id="<?php echo $rangeRelationRow->result; ?>Channel"><?php echo "&raquo;&nbsp;".ucwords(PAGECHILD)." for ".$rangeRelationRow->result; ?></div></a> <?php 
      } 
     break; 
    } ?> 
+0

Quelqu'un peut-il regarder cela? Je suis toujours confiant de savoir comment le code fonctionne, c'est juste un problème avec la clause WHERE, j'en ai besoin pour que la variable $ pageGrandChild corresponde à la dernière partie d'un chaîne dans la base de données, c'est-à-dire 'foo-bar-rules'. Des idées? – zealisreal

Répondre

1

Je ne suis pas tout à fait sûr que je bien compris votre question, mais est-LIKE une option?

SELECT .... WHERE slug LIKE "%-rules" AND slug != "foo-bar-rules" 

sélectionnerait tous les enregistrements dont le slug se termine par -rules.

+0

Cela a fonctionné un charme Pekka, merci beaucoup pour la réponse rapide et les appologies sur le double post, je ne voulais pas faire cela, mais vu aucune autre option pour rallumer mon poste original, Im nouveau sur ici et ne pouvait pas voir possibilité de republier mon message afin qu'il revienne en haut de la liste des questions récentes. Quelque chose que le site devrait faire; si ce n'est déjà fait :) – zealisreal

+0

@Daniel ouais, pas de problème. Pour des façons d'attirer l'attention sur les anciennes questions, voir http://meta.stackexchange.com/questions/7046/how-to-get-attention-for-your-old-unanswered-questions –

+0

@Pekka, désolé de tracas, mais faites vous savez aussi comment je peux utiliser la clause LIKE dans SQL dans la clause SELECT? J'ai besoin de trouver un moyen de retirer la partie finale d'une chaîne qui a des délimiteurs de trait d'union, c'est-à-direfoo-bar-rules (comment est-ce que j'obtiendrais 'rules' de cette chaîne au lieu de la chaîne complète?) – zealisreal

0

Est-ce que la requête vient échouer à cause de la syntaxe ou la logique ne fonctionne pas?

Quoi qu'il en soit, je pense que vos citations sont un peu hors ...

A la fin de la requête que vous aviez

AND slug != '".PAGEPARENT."-".PAGECHILD."-".PAGEGRANDCHILD."'; 
              "); 

et je pense que vous avez besoin

AND slug != '".PAGEPARENT."-".PAGECHILD."-".PAGEGRANDCHILD."')"; 

également , pourquoi allez-vous à la longueur de l'utilisation de définir?

Pouvez-vous faire cela? (Je pourrais manquer quelque chose si vous utilisez des classes ...)

$PAGEPARENT = "foo"; $PAGECHILD = "bar"; $PAGEGRANDCHILD = "rules"; 
+0

Vous m'avez à regarder la requête et j'ai trouvé que c'était un peu faux, il devrait être .. ET slug! = '".PAGEPARENT." - ". PAGECHILD." - ". PAGEGRANDCHILD."' '); votre révision ne fermerait pas l'instruction de requête mysql_query (".J'utilise définit le site large et comme il y a 3 styles différents pour le thème et l'aide définit cela aide à changer le thème au lieu de changer 1000 de lignes de code :) malheureusement, la requête sql ne fonctionne toujours pas. J'apprécie cependant l'aide. – zealisreal

+0

Quelqu'un d'autre peut-il aider? – zealisreal