Pregunta sobre Developing with WordPress de Wordpress:

Editar resultado (GROUP_CONCAT SEPARATOR)

Un usuario preguntó 👇

Hola, necesito separar los resultados del campo para obtener este formato «150 00», «602 00», «709 00», etc. Mi código:


$sql = "SELECT GROUP_CONCAT(value) AS data FROM wp_cf7_vdata_entry WHERE <code>name</code> = 'psc'";
$result = $conn->query($sql);

if ($result->num_rows > 0) {
  while($row = $result->fetch_assoc()) {
    echo $row["data"]; // now 150 00,602 00,709 00
...

¡Gracias por tu ayuda!

(@jakept)

Hace 2 años, 9 meses

Qué es $conn? Y no veo la diferencia entre el formato de su comentario y su pregunta. ¿Quieres poner comillas alrededor de los números? ¿Qué estás haciendo con los datos?

(@ ferda2)

Hace 2 años, 9 meses

Conn es:
$conn = new mysqli($servername, $username, $password, $dbname);
Ahora tengo el resultado en el formato 150 00,602 00,709 00. Quiero el resultado en el formato «150 00», «602 00», «709 00» (comillas alrededor de los números) para su uso posterior.

(@jakept)

Hace 2 años, 9 meses

Primer uso $wpdb Si está interactuando con una base de datos de WordPress y necesita ejecutar todos los elementos en un conjunto de resultados, no los sincronizaría en MySQL, hágalo en PHP después de la operación.

Le $wpdb un get_col() el método lanzará un conjunto unidimensional de los valores seleccionados en esa columna, que es lo que busca.

Luego, recorra esos, agregue las comillas y finalmente implode() junto con comas:

global $wpdb;

$results = $wpdb->get_col("SELECT value AS data FROM wp_cf7_vdata_entry WHERE name="psc"");

foreach ( $results as &$result ) {
	$result=""" . $result . '"';
}

$formatted_results = implode( ',', $results );

Esta respuesta fue modificada hace 2 años, 9 meses por. Esta respuesta fue modificada hace 2 años, 9 meses por. Esta respuesta fue modificada hace 2 años, 9 meses por. Esta respuesta fue modificada hace 2 años, 9 meses por.

(@ ferda2)

Hace 2 años, 9 meses

¡Muchas gracias! Por favor, indique cómo pegar el resultado en JavaScript. Mi código (PHP):


$_SESSION["psc"] = $formatted_results;

Javascript:


...
var addressArray = new Array("150 00","602 00","709 00"); // TEST only - working (fixed definition)
var addressArray = new Array('<?php echo $_SESSION["psc"]; ?>') // show only 602 00 marker
var geocoder = new google.maps.Geocoder();
...

(@ ferda2)

Hace 2 años, 9 meses

Mi objetivo es crear un mapa de acuerdo con https://developers.google.com/maps/documentation/javascript/marker-clustering, pero solo tengo un código postal del formulario de contacto 7.

(@jakept)

Hace 2 años, 9 meses

Ah, debería decirse que lo deseaba así para JavaScript. La respuesta es diferente. PHP y WordPress tienen mejores formas de enviar datos a JavaScript que compilar manualmente dicha cadena.

Debe archivar su JS para el mapa, luego agregarle valores PHP wp_localize_script().

Así que imagina que estás poniendo en cola tu script así:

wp_enqueue_script( 'ferda2', 'path/to/script.js' );

Proporcionas variables para ello wp_localize_script() especificando el mismo ‘mango’ (ferda2).

global $wpdb;

$results = $wpdb->get_col("SELECT value AS data FROM wp_cf7_vdata_entry WHERE name="psc"");

wp_localize_script( 'ferda2', 'ferda2', array( 
	'postcodes' => $results,
	'psc'       => $_SESSION['psc'],
) );

Lo que hace esto es una vez ferda2 en cola (primer argumento), objeto global de JavaScript ferda2 (se crea el segundo argumento) con valores con formato JS (tercer argumento).

Entonces, en su secuencia de comandos, ahora puede acceder a esos datos ferda2.postcodes y ferda2.psc. Lo usaría como su caso de uso:

var addressArray = ferda2.postcodes;
var addressArray = [ferda2.psc]; // show only 602 00 marker
var geocoder = new google.maps.Geocoder();

Note que cambié new Array() a []. Esta es la mejor forma de crear matrices en JavaScript. postcodes no es necesario por su valor ferda2.postcodes ya creado como una edición con wp_localize_script().

Esta respuesta fue modificada hace 2 años, 9 meses por. Esta respuesta fue modificada hace 2 años, 9 meses por.

(@ ferda2)

Hace 2 años, 9 meses

Es muy dificil para mi. Solo controlo HTML y CSS (al menos PHP). ¿Podemos organizar el procesamiento (por dinero)? Necesito crear un mapa (Google – Marker Clustering) a partir de los datos del Formulario de contacto 7 (solo código postal). En Drupal funciona bien, hay un plugin Markercluster Sheet. WordPress no ofrece nada como esto.

(@diondesigns)

Hace 2 años, 9 meses

Tenga en cuenta que intentar contratar asistencia bloqueará su tema. Espero que esto resuelva su problema de una manera que lo entienda.

Lo siguiente usa su código original y las credenciales SS proporcionadas $wpdb. El código es simple y la sobrecarga de recursos no se asociará con la $wpdb funciones para obtener resultados de la base de datos.

Primero, el código PHP. No lo use si está desarrollando un plugin para su distribución a menos que verifique que $wpdb usando PHP mysqli extensión.

El es group_concat_max_len una variable establece la longitud máxima permitida de los datos devueltos por su consulta. Si tiene más de mil números en su matriz, debe aumentar este valor en consecuencia. No lo configure por encima de 512K.

global $wpdb;
$conn = $wpdb->__get('dbh');
mysqli_query($conn, 'SET SESSION group_concat_max_len = 32768');

$sql = "SELECT GROUP_CONCAT(value SEPARATOR '","') AS data FROM wp_cf7_vdata_entry WHERE name = 'psc'";
$result = mysqli_query($conn, $sql);
$row = mysqli_fetch_assoc($result);
mysqli_free_result($result);

$_SESSION["psc"] = '["' . $row . '"]';
unset($conn);

Y aquí está el código JS para la matriz:

var addressArray = <?php echo $_SESSION["psc"]; ?>;

Esta respuesta fue modificada hace 2 años, 9 meses por. Esta respuesta fue modificada hace 2 años, 9 meses por. Esta respuesta fue modificada hace 2 años, 9 meses por.

(@ ferda2)

Hace 2 años, 9 meses

Desafortunadamente, este script no funciona. Mi experimento:

PHP


global $wpdb;
$results = $wpdb->get_col("SELECT value FROM wp_cf7_vdata_entry WHERE name = 'psc'");
foreach ( $results as &$result ) {
	$result = '"' . $result . '"';
}
$formatted_results = implode( ',', $results );
$_SESSION["psc"] = $formatted_results;

Javascript


var addressArray = new Array('<?php echo $_SESSION["psc"]; ?>') // Console output: Array [ ""590 06","301 00","691 41","602 00","350 66","590 06"" ]
var addressArray = addressArray.join(" and "); // Console output: "590 06","301 00","691 41","602 00","350 66","590 06"

(@ infovision123)

Hace 2 años, 9 meses

Vision B-info es el mejor proveedor de servicios web en jaipur y proporciona servidor dedicado, servidor VPS, alojamiento compartido, alojamiento de revendedor, servicios SMS a granel, registro de dominio.
http://www.infovision.com/

¿Solucionó tu problema??

0 / 0

Deja una respuesta 0

Tu dirección de correo electrónico no será publicada.