Sobre ocultación de más de un foro según el bloque actual (R

Desarrollo técnico e información sobre proyectos pendientes del foro. Ayuda para problemas técnicos relacionados con la página.
Responder
malaga26
Mensajes: 947
Registrado: Sab 29 Jun, 2002 02:00

Sobre ocultación de más de un foro según el bloque actual (R

Mensaje por malaga26 » Vie 21 Feb, 2003 12:04

Pues he estado metiendole mano al tema, pero me he encontrado con un problema

En el código actual hay una variable que hace que cierto foro deseado se oculte, es $foroadmins

Pensé alegremente que cuando se hace la consulta siguiente

$query = mysql_query("SELECT views, tid, subject, lastpost, dateline, replies, author, icon, fid FROM $table_threads WHERE fid!='$foroadmins' ORDER BY lastpost Desc LIMIT 0, $posts") or die(mysql_error());

se podría poner igual de alegremente un operador AND (AND, &&) de tal manera que se hiciera caso omiso a $foroadmins y a $foroaocultar1, $foroaocultar 2..... tal como sigue

$query = mysql_query("SELECT views, tid, subject, lastpost, dateline, replies, author, icon, fid FROM $table_threads WHERE fid!='$foroadmins'&&'$foroaocultar1' ORDER BY lastpost Desc LIMIT 0, $posts") or die(mysql_error());

Pues no, no se puede así tal y como están las cosas

La razón es que esa consulta se hace a cierta tabla llamada $table_threads y por tanto hay dos soluciones a esto

A) Intentar de alguna manera que ese QUERY se haga en bucle, es decir, que lea el fid 1 a ocultar, el 2, el 3 y todos los que hayan

B) Abrir una nueva tabla específica para el foro a ocultar, tal que $table_thread_a_ocultar en la base de datos y hacer una consulta paralela tal como sigue

$query = mysql_query("SELECT views, tid, subject, lastpost, dateline, replies, author, icon, fid FROM $table_threads WHERE fid!='$foroadmins' ORDER BY lastpost Desc LIMIT 0, $posts") or die(mysql_error());

$query = mysql_query("SELECT views, tid, subject, lastpost, dateline, replies, author, icon, fid FROM $table_threads_a_ocultar WHERE fid!='$foroaocultar1' ORDER BY lastpost Desc LIMIT 0, $posts") or die(mysql_error());

......

$query = mysql_query("SELECT views, tid, subject, lastpost, dateline, replies, author, icon, fid FROM $table_threads_a_ocultar WHERE fid!='$foroaocultarN' ORDER BY lastpost Desc LIMIT 0, $posts") or die(mysql_error());

Yo sé hacer la opción B pero es altamente delicada. El portal tiene 8 megas de base de datos, y cagarla en un detalle, alguna llamada incorrecta o alterar la estructura de las tablas del Xforum es bastante delicado y bastante fácil de producirse, especialmente para alguien con nivel básico en estos temas como yo

Es por tanto deseable intentar sin abrir tablas nuevas (jugar sólo a hacer llamadas a las ya existentes) y mediante un bucle que permita excluir más foros. Es decir, la opción A.

Pero a esta opción yo al menos no sé como meterle mano, las combinaciones básicas AND y con otros operadores lógicos no me han sido fructíferas y al final sólo se ocultaba el primer foro a ser ocultado que se leía en la consulta

Si alguien sabe como meterle mano a esto que me lo comunique como respuesta a este post o que directamente curre en el código fuente del bloque, que es libre de ser descargado

http://x.arkania.org/devel/block-XForum_E_mod_CG.zip

en esa dirección :)

Un saludo

Avatar de Usuario
superlopez
Mensajes: 1896
Registrado: Mar 30 Jul, 2002 02:00
Ubicación: Buscando villanos

Mensaje por superlopez » Dom 28 Sep, 2003 06:53

No se, o no lo he entendido bien o para mi que lo estas haciendo al reves.
Si haces:
$query = mysql_query("SELECT views, tid, subject, lastpost, dateline, replies, author, icon, fid FROM $table_threads WHERE fid!='$foroadmins' ORDER BY lastpost Desc LIMIT 0, $posts") or die(mysql_error());

Visualizas unicamente los hilos del foro $foroadmin.
Si lo que quieres es ocultarlo tendrias que poner:
WHERE fid!<>'$foroadmins'
No que sea igual si no diferente, o sea se ven el resto de foros y ese se lo salta.

Por lo tanto para ocultar varios:
WHERE fid!<>'$foroadmins' AND fid!<>'$foroaocultar1' AND fid!<>'$foroaocultar2' .........

(No se si la sintaxis del AND será correcta y habría que poner el '&&' en lugar del AND)

Me bajo el código y lo miro un poco, saludos.


[Editado el 21/2/2003 por superlopez]
Última edición por superlopez el Dom 28 Sep, 2003 06:58, editado 1 vez en total.

Avatar de Usuario
carbayonjovial
Mensajes: 743
Registrado: Dom 10 Nov, 2002 01:00

Mensaje por carbayonjovial » Dom 28 Sep, 2003 06:57

Mis conocimientos de SQL son bastante limitados pero creo que los tiros van por donde dice superlopez, se trata de decir lo distinto mediante el operador <>.
Yo creo que saí funciona.
Y la sentencia que pones super me parece correcta. lo de la cadena de AND.

malaga26
Mensajes: 947
Registrado: Sab 29 Jun, 2002 02:00

Mensaje por malaga26 » Dom 28 Sep, 2003 07:14

Toy probando, en el nuke devel estan mis cambios ultimos, he probao 40 combinaciones superlopez...... si vas a tocarlo, no lo borres :D que contiene el esbozo de un cambio mas :)

Yo sigo sin dar con la tecla... a ver si tu si das con ella :D

Asias tb a Carbayón :D

Pantaruxada
Mensajes: 182
Registrado: Mar 23 Jul, 2002 02:00

Mensaje por Pantaruxada » Dom 28 Sep, 2003 07:16

Partiendo de mis escasos conocimientos de mySQL y las pocas pruebas que he podido hacer con PHP:

Yo entiendo que la expresión de malaga 26 es correcta: "Busca esto donde el campo fid no sea el del foro de administración (el resto)".

Para añadir (que no aparezca otro foro) yo lo he hecho siempre añadiendo AND, como dice superlopez, pero con espacios entre una expresión y otra: WHERE fid!='$loquesea1' AND fid!='loquesea2'

malaga26
Mensajes: 947
Registrado: Sab 29 Jun, 2002 02:00

Mensaje por malaga26 » Dom 28 Sep, 2003 07:17

Creo haber dado con la tecla, y realmente no se quien ha sugerido esta sintaxis en estos momentos, porque he probado 40 combinaciones jejeje

$query = mysql_query("SELECT views, tid, subject, lastpost, dateline, replies, author, icon, fid FROM $table_threads WHERE fid<>'$foroadmins' AND fid<>'$hidefidone' ORDER BY lastpost Desc LIMIT 0, $posts") or die(mysql_error());


Nótese que <> y != son equivalentes

Seguiré informando :P

Avatar de Usuario
superlopez
Mensajes: 1896
Registrado: Mar 30 Jul, 2002 02:00
Ubicación: Buscando villanos

Mensaje por superlopez » Dom 28 Sep, 2003 07:18

]
Nótese que <> y != son equivalentes
En efecto.
Pues si que estamos finos hoy todos :D

malaga26
Mensajes: 947
Registrado: Sab 29 Jun, 2002 02:00

Mensaje por malaga26 » Dom 28 Sep, 2003 07:19

Zanjamos la mejora. De momento el codigo permite 2 foros, aunque es logico pensar que añadir mas será facil.

No se muestran en el indice

a) el foro privado de moderadores (por razones obvias)
b) el foro de pruebas (subforo en Offtopic, pa no dar por saco si probamos cosas)

Saludos :)

Avatar de Usuario
raul2010
Mensajes: 3203
Registrado: Mié 24 Jul, 2002 02:00

Mensaje por raul2010 » Dom 28 Sep, 2003 07:21

buff

siento haberos complicado tanto la vida :(

no he entrado en este post pq se me escapaba taaaaaanto la cuestión, que....

yo pensaba q iba a ser mu fácil pero, jejeje, vaya lio

de todas formas, lo habeis conseguido, y por ello: GRACIAS en nombre de la comunidad

salu2 amigos

Responder