dean:
No es sencillo.
Como he dicho ya, lo que quieres es transponer filas por columnas y eso no es posible usando MySQL.
Bien pues, he llegado a este código que hace lo que pides:
Código PHP :
require("dbutil.inc.php");
$columnas = Array(-1=>"Nombre",0=>"Email"); // Estas columnas están sí o sí, pero no son parte de jos_community_fields
$db = new cDB();
$db->Connect("localhost","test","root","pwdfive5");
if ($db->error) { echo $db->errno.": ".$db->errmsg; exit; }
/* Primero tomo el nombre de las columnas */
$sql = "SELECT `id`, `name` FROM `jos_community_fields` ORDER BY `id`";
$db->Query($sql);
if ($fila = $db->First()) {
echo "<table><tr>";
do {
$columnas[$fila['id']] = $fila['name']; // Aquí agrego a $columnas las columnas a mostrar
} while ($fila = $db->Next());
foreach($columnas as $key => $value) {
echo "<th>".$value."</th>\n";
}
}
/* Ahora la verdadera consulta */
$sql = "SELECT `jos_users`.`id`, `jos_users`.`name` AS nombre, `jos_users`.`email`, `jos_community_fields_values`.`value`,
`jos_community_fields`.`name`
FROM `jos_users`, `jos_community_fields_values`, `jos_community_fields`
WHERE `jos_users`.`id` = `jos_community_fields_values`.`user_id`
AND `jos_community_fields`.`id` = `jos_community_fields_values`.`field_id`
ORDER BY `jos_community_fields_values`.`user_id`, `jos_community_fields_values`.`field_id`";
$db->Query($sql);
if ($fila = $db->First()) {
$currid = -1; // Valor imposible
do {
if ($fila['id'] != $currid) { // Si ha cambiado el ID, es otro usuario, por lo tanto otra fila en la tabla.
echo "<tr><td>".$fila['nombre']."</td><td>".$fila['email']."</td>";
$currid = $fila['id'];
}
echo "<td>".$fila['value']."</td>";
} while ($fila = $db->Next());
echo "</table>";
} // if
$db->Disconnect();
Una gran salvedad: he usando mi propia biblioteca de clase para manejar todo lo que tiene que ver con MySQL pero espero entiendas la lógica del código (si quieres la biblioteca, me la pides por mensaje privado y te la paso).
Estoy seguro que el código que te presento se puede mejorar, incluso que haya otra forma de hacer lo que quieres mucho mejor ésta, pero al menos ésta funciona
Inyaka escribió:
a ser franco es bastante sencillo
Lamento disentir.
Inyaka escribió:
DriverOp esto no es bueno hacerlo:
Código MySQL :
FROM `jos_users`, `jos_community_fields_values`, `jos_community_fields`
asi no tienes control sobre que campos unen la consulta ni si dejaras fuera los no relacionados.
No sé de qué estás hablando, la consulta SQL debe saber qué tablas intervienen en la consulta.