- Home
- Categorie
- Coding e Sistemistica
- PHP
- Problemino con interrogazione al database
-
Problemino con interrogazione al database
Buonasera,
ho una tabella MySQL di questo tipo
| nick1 nick2 ok |
| Roxas Nome 1 |
| Nome Roxas 2 |
| Nome Roxas 1 |e vorrei stampare a video tutti i nickname "Nome" dove "ok" = 1 ma non so come fare, io solitamente per gli echo dal db uso il seguente script:
$result=mysql_query('SELECT [...] FROM [...] WHERE [...]');
$righe=mysql_num_rows($result);
for ($i=0;$i<$righe;$i++)
{
$array_result=mysql_fetch_row($result);
$stringa=$array_result[0];
$stringa2=$array_result[1];
echo $stringa.$stringa;
}però in questo caso non so come comportarmi e chiedo aiuto a voi
-
Php non me lo ricordo bene quindi mi butto, male che vada, passera qualcuno a correggerci...
[PHP]$result=mysql_query('SELECT nick1 FROM nomeTabeòòa WHERE ok=1');
while ($row = mysql_fetch_assoc($result)) {
echo $row["nick1"]."<br />";
}[/PHP]
-
E' giusto il codice XD
Però ho bisogno di cercare in entrambe le colonne nick1 e nick2 e non ci devono essere due nick uguali, è questo il mio problema >_<
-
Non ti ho capito bene, ma se intendi che nella stessa riga nick1 e nick2 non possono essere uguali, prova questo:
[php]$q = mysql_query('SELECT * FROM tabella WHERE ok = 1');
while($r = mysql_fetch_assoc($q)) {if($r['nick1'] == $r['nick2']) { continue; }
echo $r["nick1"]."<br />";
}[/php]
Ciao
-
Io intendo che devo interrogare nick1 e nick2 insieme e prendere i nickname secondo certe clausole (tipo che ok = 1) e che i "doppioni" vengano filtrati.
-
I doppioni che intendi dire sono le righe uguali in tutti e 3 i campi?
Se intendi questo, cambia la query così:
[php]$q = mysql_query('SELECT DISTINCT * FROM tabella WHERE ok = 1'); [/php]Ciao
-
Niente mi dà lo stesso risultato di prima, non generalizzando ma andando sul mio caso concreto:
La query (se non specifico "*" mi dà errore):
$get_nick = $_GET['nickname'];
$q=mysql_query('SELECT DISTINCT * FROM table WHERE id1 = "'.$get_nick.'" OR id2 = "'.$get_nick.'" [****] AND accettato = 1 AND cancellato = 0 AND rifiutato = 0');
while($r = mysql_fetch_assoc($q)) {
if($r['id1'] == $r['id2']) { continue; }
echo $r["id1"]."<br />";
}[****] --> (non è nel codice, è una nota per il forum :D) Ho bisogno di avere tutti id1 e un id2 dove compare $get_nick e accettato sia uguale ad uno e cancellato e rifiutato uguale a 0.
Il database: htt p:// ww w.technicianpokemon.com/old-hosting/images/db.png
Io Roxas Shadow dovrò visualizzare: Nome Utente e Nick1, poichè rispettano le condizioni e non importa se il mio nick sia su id1 o id2
-
Se tu vuoi che non vengono visualizzati più di 1 record per nick1 e nick2 dovresti unire i campi e farne solo uno in modo da farlo diventare chiave primaria.
Ciao
-
E poi come faccio a inserirci i dati ?
-
@RoxasShadow said:
Il database: htt p:// ww w.technicianpokemon.com/old-hosting/images/db.png
Io Roxas Shadow dovrò visualizzare: Nome Utente e Nick1, poichè rispettano le condizioni e non importa se il mio nick sia su id1 o id2
mmm...a parte che il db fatto in questo modo non è il massimo, io di solito faccio una colonna stato con tipo di dati enum in cui ci metto i valori che quel campo può assumere, così è il db che fa sanitize dell'input e non l'applicazione (esempio concreto: cosa succederebbe se in qualche modo la colonna rifiutato fosse null o fosse 3 o 4?)
In ogni caso, scusa per la divagazione, facciamo un esempio pratico dalla tabella che hai postato tu (il file png qui sopra) quali risultati ti aspetti?Ciao
-
@mferraroni said:
esempio concreto: cosa succederebbe se in qualche modo la colonna rifiutato fosse null o fosse 3 o 4?)
La colonna booleana rifiutato ha un valore predefinito 0 e i dati vengono modificati mediante un form che imposta il valore a 1.
@mferraroni said:
In ogni caso, scusa per la divagazione, facciamo un esempio pratico dalla tabella che hai postato tu (il file png qui sopra) quali risultati ti aspetti?
In questo caso la query dovrebbe "echare" (accedendo nel profilo di Roxas Shadow) i nickname Nick1 e Nome Utente poichè sono entrambi accettati (1 = true) e non rifiutati e/o cancellati (0 = false).
-
@RoxasShadow said:
In questo caso la query dovrebbe "echare" (accedendo nel profilo di Roxas Shadow) i nickname Nick1 e Nome Utente poichè sono entrambi accettati (1 = true) e non rifiutati e/o cancellati (0 = false).
Secondo me è un approccio sbagliato proprio dalla progettazione, modifica il campo in modo che accetti solo i valori A,R,C ovvero Accettato, Rifiutato, Cancellato (mysql type enum) e poi modifica il form di conseguenza.
La query poi diventa una sempliceSELECT DISTINCT id1, id2 WHERE (id1 = XXX OR id2 = XXX) and stato = A
al posto di XXX mettici le tue condizioni.
Ciao
-
Ti ringrazio infinitamente mferraroni, lo script funziona che una meraviglia.
Alla prossima.
-
Ops, ho un problema
La query è questa
$query=mysql_query('SELECT DISTINCT * FROM amicizie WHERE (id1 = "'.$nickname.'" OR id2 = "'.$nickname.'") AND stato = "A"');
while($result = mysql_fetch_assoc($query)) {
if($result['id1'] == $result['id2']) { continue; }
echo $result["id2"].', ';
}Il database è questo
h ttp:/ /ww w.technicianpokemon.com/old-hosting/images/db2.png
Io vorrei visualizzare "Linkino" ma visualizzo "Roxas Shadow" e lo stesso visualizzerà l' utente che ha $nickname impostato su "Linkino".
Per piacere aiutatemi
-
@RoxasShadow said:
Io vorrei visualizzare "Linkino" ma visualizzo "Roxas Shadow" e lo stesso visualizzerà l' utente che ha $nickname impostato su "Linkino".
Ciao cambia
echo $result["id2"].', ';
con
echo $result["id1"].', ';
poi un consiglio, cerca di non utilizzare l'asterisco (*) nelle query che non è il massimo in fatto di performance, ma specifica sempre i campi che ti servono, in questo caso ti servono solo id1 ed id2
Ciao
Matteo
-
Si ma in questo caso cambia per me, ma non per tutti: mi spiego.
Con id1 io accedendo con $nickname a Linkino visualizzo "Linkino", la stessa cosa accade accedendo con $nickname a Roxas Shadow visualizzo "Roxas Shadow".
A me servirebbe che se accedessi con $nickname "Linkino" visualizzassi "Roxas Shadow" e viceversa, accedendo con $nickname "Roxas Shadow" visualizzassi "Linkino".Grazie per il tempo e l' aiuto dedicatomi.
-
@RoxasShadow said:
Si ma in questo caso cambia per me, ma non per tutti: mi spiego.
Con id1 io accedendo con $nickname a Linkino visualizzo "Linkino", la stessa cosa accade accedendo con $nickname a Roxas Shadow visualizzo "Roxas Shadow".
A me servirebbe che se accedessi con $nickname "Linkino" visualizzassi "Roxas Shadow" e viceversa, accedendo con $nickname "Roxas Shadow" visualizzassi "Linkino".Se ho capito bene la struttura della tabella id1 è il nick e id2 è il nome dell'utente, quindi tu vuoi far accedere sia con il nome sia con nick, e visualizzare sempre il nick, giusto?
Ciao
-
E' un sistema di amicizie.
Id1 è il richiedente, Id2 è il destinatario dell' amicizia.
Se accedo come richiedente dovrò vedere Id2 e se accedo come destinatario vedrò Id1.
-
@RoxasShadow said:
E' un sistema di amicizie.
Id1 è il richiedente, Id2 è il destinatario dell' amicizia.
Se accedo come richiedente dovrò vedere Id2 e se accedo come destinatario vedrò Id1.Ok.
allora puoi fare così:
$whoami = <nickname con cui sono dentro al sistema> $query=mysql_query('SELECT DISTINCT * FROM amicizie WHERE (id1 = "'.$nickname.'" OR id2 = "'.$nickname.'") AND stato = "A"'); while($result = mysql_fetch_assoc($query)) { if($result['id1'] == $whoami) { // se sono richiedente... echo $result['id2']; // ...vedo id2 } else { // altrimenti.... echo $result["id1"]; // ...vedo id1 } ;
Spero che sia chiaro.
Ciao
Matteo
-
Funziona finalmente!
Ti ringrazio infinitamente, a presto.