Visualizzazione risultati 1 fino 9 di 9

Discussione: [php+mysql] Estrapolare tutti i dati, da una tabella, che hanno una parola in comune

  1. #1
    Guest

    Predefinito [php+mysql] Estrapolare tutti i dati, da una tabella, che hanno una parola in comune

    Ciao a tutti.

    Ho uno script:
    Codice PHP:
    $result = mysql_query("select * FROM wp_postmeta WHERE meta_key ='_aioseop_title' ORDER BY post_id desc limit 5 " );
    while (
    $records = mysql_fetch_assoc($result)) {
    echo
    "<a href=http://nomesito.it/?p=". $records['post_id'] .">". $records['meta_value'] ."</a>";
    }
    Nel db ho una cosa del genere:

    Codice:
    CREATE TABLE `wp_postmeta` (
      `meta_id` bigint(20) unsigned NOT NULL auto_increment,
      `post_id` bigint(20) unsigned NOT NULL default '0',
      `meta_key` varchar(255) default NULL,
      `meta_value` longtext,
      PRIMARY KEY  (`meta_id`),
      KEY `post_id` (`post_id`),
      KEY `meta_key` (`meta_key`)
    ) ENGINE=MyISAM AUTO_INCREMENT=15782 DEFAULT CHARSET=utf8 ;
    
    INSERT INTO `wp_postmeta` VALUES (1, 5, '_aioseop_title', 'Il contenuto'); 
    INSERT INTO `wp_postmeta` VALUES (4, 7, '_blabla', 'Il contenuto');
    Quindi, prelevo tutti i dati contenuti nel meta_value nel caso in cui siano associati al meta_key=_aioseop_title

    E fin qui è tutto ok.

    Io però vorrei prelevare tutti i dati contenuti nel meta_value (sempre se meta_key=_aioseop_title) che abbiano la parola "testo" (non come prefisso), es:
    Codice:
    INSERT INTO `wp_postmeta` VALUES (1, 2, '_aioseop_title', 'ciao ciao TESTO ciao ciao'); 
    INSERT INTO `wp_postmeta` VALUES (2, 3, '_aioseop_title', 'ciao ciao VIDEO ciao ciao');
    Quindi, seguendo l'esempio, estrapolare solo la prima riga (perchè nel meta_value è contenuta la parola TESTO).

    Successivamente, vorrei che al dato stampato venisse tolta la parte in cui c'è scritto "testo".

    Esempio:
    Estrapolo tutti i dati da meta_value che hanno all'interno la parola TESTO (es. "ciao ciao TESTO ciao ciao").
    Ed io vorrei stampare:

    Codice HTML:
    <a href="http://nomesito.it?p=1">ciao ciao</a>
    Dove quindi non viene stampato l'intera frase "ciao ciao TESTO ciao ciao", ma solo "ciao ciao" ovvero la prima parte (quindi bloccare prima della parola TESTO).

    Come posso fare?
    Ultima modifica di musicanapoli : 14-04-2010 alle ore 19.17.17

  2. #2
    L'avatar di saitfainder
    saitfainder non è connesso Sëniör Stäff
    Data registrazione
    06-12-2002
    Residenza
    Torino
    Messaggi
    8,715

    Predefinito

    La query la fai così:

    Codice:
    SELECT *
    FROM wp_postmeta
    WHERE meta_key ='_aioseop_title'
    AND meta_value LIKE "%TESTO%"
    ORDER BY post_id DESC
    LIMIT 5
    E poi in PHP fai qualcosa del genere:
    Codice PHP:
    $testo = preg_replace('/TESTO .*$/', '', $testo);


    «È una mia peculiarità distorcere la verità e inventarne di nuove.»
    «I tuoi orientamenti hanno su di me un effetto prossimo allo zero.»


  3. #3
    Guest

    Predefinito

    Uhm, non ho capito come scrivere la seconda parte...
    Il while che ho fatto io devo toglierlo?

  4. #4
    L'avatar di saitfainder
    saitfainder non è connesso Sëniör Stäff
    Data registrazione
    06-12-2002
    Residenza
    Torino
    Messaggi
    8,715

    Predefinito

    No, il while va benissimo, ma ogni elemento $records['meta_value'] preso dal database va passato attraverso il codice PHP che ti ho incollato. Per farla breve così:
    Codice PHP:
    $records['meta_value'] = preg_replace('/TESTO .*$/', '', $records['meta_value']);


    «È una mia peculiarità distorcere la verità e inventarne di nuove.»
    «I tuoi orientamenti hanno su di me un effetto prossimo allo zero.»


  5. #5
    Guest

    Predefinito

    Codice PHP:
    $result = mysql_query("select * FROM wp_postmeta WHERE meta_key ='_aioseop_title' AND meta_value LIKE "%testo%" ORDER BY post_id DESC LIMIT 5");
    while (
    $records = mysql_fetch_assoc($result)) {
    echo
    "<a href=http://nomesito.it/?p=". $records['post_id'] .">". $records['meta_value'] = preg_replace('/testo .*$/', '', $records['meta_value'])."</a>";
    Cosa sbaglio?
    Ultima modifica di musicanapoli : 16-04-2010 alle ore 15.47.33

  6. #6
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,686

    Predefinito

    prova così:
    Codice PHP:
    while ($records = mysql_fetch_assoc($result)) {
    echo
    "<a href=http://nomesito.it/?p=". $records['post_id'] .">". preg_replace('/testo .*$/', '', $records['meta_value']) ."</a>";
    }
    Ciao!

  7. #7
    Guest

    Predefinito

    Citazione Originalmente inviato da alemoppo Visualizza messaggio
    prova così:
    Codice PHP:
    while ($records = mysql_fetch_assoc($result)) {
    echo
    "<a href=http://nomesito.it/?p=". $records['post_id'] .">". preg_replace('/testo .*$/', '', $records['meta_value']) ."</a>";
    }
    Ciao!
    Ciao ale.
    Non stampa niente, rimane vuoto....

  8. #8
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,686

    Predefinito

    Sinceramente la query come tel'ha scritta saitfainder non la farei... però visto che lo ha detto lui, dovrebbe funzionare

    Ma "tentare non nuoce". Ecco come la farei io:
    Codice:
    SELECT *
    FROM wp_postmeta
    WHERE meta_key ='_aioseop_title'
    AND meta_value LIKE '%TESTO%'
    ORDER BY post_id DESC
    LIMIT 5
    LIMIT 5 significa di avere al massimo 5 risultati. e ne vuoi di più puoi aumentare il numero o addirittura eliminare "LIMIT %"

    Ciao!
    Ultima modifica di alemoppo : 16-04-2010 alle ore 16.58.21

  9. #9
    Guest

    Predefinito

    Così funziona, praticamente hai cambiato le virgolette da "%TESTO%" a '%TESTO%' ...
    Grazie mille ad entrambi.

    Edit.
    Una domanda...
    Ma se al posto di "testo" volessi mettere il carattere - facendo così '%-%'
    non va...
    Il LIKE funziona solo con le lettere?
    Ultima modifica di musicanapoli : 16-04-2010 alle ore 17.06.51

Tags for this Thread

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •