Zapytanie do bazy danych o kilka rzeczy
Napisano 03 czerwca 2015 - 10:30
Cześć. Piszę do Was ponownie, gdyż znowu mam problem.
Mam forum na phpbb3 prężnie się rozwijające i mam problem z osobami, które się rejestrują, wrzucają w podpis kilka linków i wychodzą. Jest trudnym zadaniem przechodzenie między dużą ilością użytkowników, więc mam do Was prośbę, abyście mi pomogli napisać pliczek .php, który po zalogowaniu do bazy danych będzie mi pokazywał użytkowników, którzy mają w podpisie "www" lub "http://", albo inne rzeczy.
Teraz do sedna.
Mam bazę danych, w środku mam tabelę _users, a z tej tabeli potrzebuję wyciągnąć user_id, username, user_sig i user_website. Nie wiem od czego zacząć.
Wiem tyle, że zapytanie do bazy powinno wyglądać mniej-więcej
SELECT * FROM _users WHERE user_sig LIKE '%http%'
Ale kompletnie nie wiem jak to zrobić z wieloma rzeczami, ani jak powinien taki plik wyglądać i później, żeby na przykład pokazywało wyniki w formie tabeli, a numer z user_id pokazywało w formie linku typu pl/memberlist.php?mode=viewprofile&u=<i tutaj user_id>, a w user_sig pokazywało jaką ma sygnaturę.
Dzięki za pomoc.
EDIT. Znalazłem rozwiązanie, łączy się z bazą, ale wywala błąd
<?php // nawiazujemy polaczenie $connection = @mysql_connect('-IP-', '-USER-', '-PASSWORD-') // w przypadku niepowodznie wyświetlamy komunikat or die('Brak połączenia z serwerem MySQL.<br />Błąd: '.mysql_error()); // połączenie nawiązane ;-) echo "Udało się połączyć z serwerem!<br />"; // nawiązujemy połączenie z bazą danych $db = @mysql_select_db('-DBUSER-', $connection) // w przypadku niepowodzenia wyświetlamy komunikat or die('Nie mogę połączyć się z bazą danych<br />Błąd: '.mysql_error()); // połączenie nawiązane ;-) echo "Udało się połączyć z bazą dancych!"; // zamykamy połączenie mysql_close($connection); /* zapytanie do konkretnej tabeli */ $wynik = mysql_query("SELECT * FROM a_users WHERE user_sig LIKE '%http%'") or die('Błąd zapytania'); /* wyświetlamy wyniki, sprawdzamy, czy zapytanie zwróciło wartość większą od 0 */ if(mysql_num_rows($wynik) > 0) { /* jeżeli wynik jest pozytywny, to wyświetlamy dane */ echo "<table cellpadding=\"2\" border=1>"; while($r = mysql_fetch_array($wynik)) { echo "<tr>"; echo "<td>".$r[1]."</td>"; echo "<td>".$r[2]."</td>"; echo "<td> <a href=\"index.php?a=del&id={$r[0]}\">DEL</a> <a href=\"index.php?a=edit&id={$r[0]}\">EDIT</a> </td>"; echo "</tr>"; } echo "</table>"; } ?> Wyskakuje błąd
Warning: mysql_query() [function.mysql-query]: Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2) in /public_html/bazunia.php on line 19 Warning: mysql_query() [function.mysql-query]: A link to the server could not be established in /public_html/bazunia.php on line 19 Błąd zapytania
Linia 24 to $wynik = mysql_query("SELECT * FROM a_users WHERE user_sig LIKE '%http%'")
Nie mam pojęcia co zrobić, żeby przede wszystkim działało, a po drugie, żeby wyglądało tak jak chciałbym.
Użytkownik Kicek edytował ten post 03 czerwca 2015 - 10:53
Napisano 03 czerwca 2015 - 13:19
Wywal:
mysql_close($connection);z linii 15
Dzieki za pomoc, zadziałało, ale mam takie coś:
I tyle. Jak zrobić, żeby to wyglądało jak wcześniej napisałem? Oraz, żeby w user_sig szukało tego http.
EDIT.
Jest git, ustawiłem tebele jak chciałem, ale o dziwo pokazuje mi tylko 20 osób i to z początku tabeli, czyli tych co się najwcześniej zarejestrowali. Jak zrobić, żeby segregowało te wyniki na przykład z tym, kto się zarejestrował najpóźniej? Albo od ilości postów, żeby pokazywało?
Użytkownik Kicek edytował ten post 03 czerwca 2015 - 13:49
Napisano 03 czerwca 2015 - 14:24
"SELECT * FROM a_users WHERE user_sig LIKE '%http%' ORDER BY nazwa_kolumny DESC"
Gdzie nazwa_kolumny jest kolumną wg której chcesz sortować DESC oznacza że malejąco, jak chcesz rosnąco to daj ASC.
webDeveloper
Napisano 03 czerwca 2015 - 14:26
"SELECT * FROM a_users WHERE user_sig LIKE '%http%' ORDER BY nazwa_kolumny DESC"Gdzie nazwa_kolumny jest kolumną wg której chcesz sortować DESC oznacza że malejąco, jak chcesz rosnąco to daj ASC.
Człowieku, dzięki wielkie A teraz jeszcze jedno pytanie, da się zrobić, żeby wyniki pokazywało tylko w jakimś zakresie? Na przykład pokazuje osoby tylko z 0 ilością postów?
Użytkownik Kicek edytował ten post 03 czerwca 2015 - 14:32
Napisano 03 czerwca 2015 - 14:32
Widocznie tylko tylu jest którzy mają w sygnaturze http. Żeby ustawić limit daje się tak:
"SELECT * FROM a_users WHERE user_sig LIKE '%http%' ORDER BY nazwa_kolumny DESC LIMIT 0,20"
Gdzie 0 oznacza początek (indeksowanie od 0), a 20 oznacza ile elementów ma wyświetlić. Spróbuj dać np 50 i zobaczysz czy wyświetli Ci ich więcej.
webDeveloper
Napisano 03 czerwca 2015 - 15:23
Widocznie tylko tylu jest którzy mają w sygnaturze http. Żeby ustawić limit daje się tak:
"SELECT * FROM a_users WHERE user_sig LIKE '%http%' ORDER BY nazwa_kolumny DESC LIMIT 0,20"Gdzie 0 oznacza początek (indeksowanie od 0), a 20 oznacza ile elementów ma wyświetlić. Spróbuj dać np 50 i zobaczysz czy wyświetli Ci ich więcej.
Nie działa. Cały czas te same wyniki wyszukuje. Może faktycznie tylu tylko zostało z http w podpisie, jak ustawię users_website to wyszukuje dużo więcej.
Napisano 04 czerwca 2015 - 08:13
A teraz jeszcze jedno pytanie, da się zrobić, żeby wyniki pokazywało tylko w jakimś zakresie? Na przykład pokazuje osoby tylko z 0 ilością postów?
LIMIT 0,20 tak, czy inaczej pokaże 20 wyników, a z tego co zrozumiałem z cytowanego postu chcesz, aby w wynikach byli użytkownicy z zerową ilością postów, także WHERE:
WHERE user_sig LIKE '%http%' AND nazwa_kolumny_z_postami = 0
Użytkownicy przeglądający ten temat: 0
0 użytkowników, 0 gości, 0 anonimowych