[PHP] pomoc w skrypcie pokazywania losowych rekordow z mysql

krzysiek213

Użytkownik
Dołączył
Styczeń 25, 2010
Posty
6
witam, jak narazie zrobilem cos takiego:

Kod:
$ID = "SELECT 'id' FROM 'list' WHERE 'feat'='1' ORDER BY RAND() LIMIT 1" ;

powinno to pokazywac te rekordy na stronie (tak naprawde te id sluzy w dalszej czesci skryptu a nie do samego pokazywania id na stronie) ale tego nie robi, poprostu jest pusto.

gdy wpisze np. $ID = 1, to reszta skryptu zaczyna dzialac i pokazuje rekordy. Nie wiem w czym jest problem, prosze o pomoc
 

RobertG

Użytkownik
Dołączył
Styczeń 3, 2007
Posty
391
Kod:
ID = "SELECT id FROM list WHERE feat=1 ORDER BY RAND() LIMIT 1" ;
Nazwy tabeli i jej kolumn, liczb nie podaje się w cudzysłowie.

BTW łatwiej znajduje się błąd, gdy zapytanie wyda się z konsoli (mysql), wtedy można szybko sprawdzić, czy samo zapytanie jest OK.
 

krzysiek213

Użytkownik
Dołączył
Styczeń 25, 2010
Posty
6
dalej to samo. moze dam calosc to ulatwi:

Kod:
$ID = "SELECT id FROM list_ots WHERE feat=1 ORDER BY RAND() LIMIT 1" ;

$SearchQuery = $mysqli -> query ( 'SELECT * FROM `list_ots` WHERE `id` = "' .$ID. '"' );

if ( $SearchQuery -> num_rows == 1)
{
	$Row = $SearchQuery -> fetch_assoc();
	$ColorStatus = 'red';	
	$Status = '<font color="red"><b>Offline</b></font>';

	if ( $Row['status'] == 1)
	{
		$ColorStatus = 'green';
		$Status = '<font color="green"><b>Online</b></font>';
	}

	if ( $Row['status'] == 0 )
	{
		$PlayersCount = '<font color="red"><b>Offline</b></font>';
	} else {
		$PlayersCount = $Row['players']. '/' .$Row['maxplayers'];		
	}
	echo '<br/><font size="4"><font color="' .$ColorStatus. '">' .$Row['name']. '</font></font><br/>
		<tr>
			<td><font color="white">Status: ' .$Status. '</font></td>
			
		</tr>

		<tr>
			<td><font color="white">IP: ' .$Row['ip']. '</font></td>
		
		</tr>

		<tr>
			<td><font color="white">Port: ' .$Row['port']. '</font></td>
	
		</tr>

		<tr>
			<td><font color="white">Players:  ' .$PlayersCount. '</font></td>
	
		</tr>

		<tr>
			<td><font color="white">Exp:  x' .$Row['exp']. '    </font></td>
			
		</tr>

		<tr>
			<td><font color="white">Client:  ' .$Row['client']. '</font></td>
			
		</tr>

		<tr>
			<td><font color="white">Country:  ' .$Row['country']. '</font></td>
			
		</tr>

		
	</table>';
}

a czy wpizse moje zapytanie czy twoje to i tak blad wywala w konsoli. a na stronie pusto

Kod:
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '$ID = "SELECT id FROM list WHERE feat=1 ORDER BY RAND() LIMIT 1"' at line 1
 
Ostatnia edycja:

RobertG

Użytkownik
Dołączył
Styczeń 3, 2007
Posty
391
Kod:
$ID = "SELECT id FROM list_ots WHERE feat=1 ORDER BY RAND() LIMIT 1" ;

$SearchQuery = $mysqli -> query ( 'SELECT * FROM `list_ots` WHERE `id` = "' .$ID. '"' );
Żeby wyliczyć ID musisz odpalić to zapytanie (tak, jak w tej drugiej linijce), a dopiero później wynik, który dostaniesz wlepić do zapytania z drugiej linijki, którą wkleiłem. Nie możesz go tak po prostu wlepić tam.
 

krzysiek213

Użytkownik
Dołączył
Styczeń 25, 2010
Posty
6
a moglbys jasniej, bo pierwszy raz takich rzeczy uzywam, a poprostu zalezy mi zeby jak najszybciej to bylo zrobione. od rana juz to kombinuje...
 

RobertG

Użytkownik
Dołączył
Styczeń 3, 2007
Posty
391
Można przerobić zapytanie, na coś takiego:

Kod:
zamiast tego:

$ID = "SELECT id FROM list_ots WHERE feat=1 ORDER BY RAND() LIMIT 1" ;

$SearchQuery = $mysqli -> query ( 'SELECT * FROM `list_ots` WHERE `id` = "' .$ID. '"' );



powinno być coś takiego:

$SearchQuery = $mysqli -> query ( 'SELECT * FROM list_ots WHERE id =(select id from list_ots where feat=1 ORDER BY RAND() LIMIT 1)' );
albo najpierw wykonać to pierwsze zapytanie ($mysqli -> query, z tego wyciągnięcie zwróconego id) i o id wlepić do drugiego zapytania.
 
Ostatnia edycja:

krzysiek213

Użytkownik
Dołączył
Styczeń 25, 2010
Posty
6
czyli lacznie powinno byc tak: ?

Kod:
$ID = "SELECT id FROM list_ots WHERE feat=1 ORDER BY RAND() LIMIT 1" ;
$SearchQuery = $mysqli -> query ("SELECT id FROM list_ots WHERE feat=1 ORDER BY RAND() LIMIT 1"
 );

jezeli tak to sa dalej bledy nie jest pusto ale jest np. tekst: i tu pusto (a powinien byc rekord)
 

RobertG

Użytkownik
Dołączył
Styczeń 3, 2007
Posty
391
Nie, to pierwsze to tylko tekst, żeby mieć id musisz go wykonać jako zapytanie na bazie danych. Wtedy będziesz miał ID. To id sobie wklejasz do tego drugiego zapytania, tam nic nie mieszasz.

To pierwsza opcja, druga jest taka, że usuwasz pierwsze zapytanie a to drugie masz takie, jak Ci napisałem.
 
Do góry Bottom