Skocz do zawartości

Zdjęcie
- - - - -

Zapytanie do bazy danych o kilka rzeczy


Najlepsza odpowiedź Kicek, 04 czerwiec 2015 - 12:31

Dzięki bardzo. Plusy dałem.

Przejdź do postu


8 odpowiedzi w tym temacie
  • Zaloguj się, aby dodać odpowiedź
Kicek

    Nowy użytkownik

  • 19 postów
    • Czas spędzony online: 1d 15h 52m 7s
-1
Neutralna

Napisano 03 czerwiec 2015 - 10:30

#1

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&amp;id={$r[0]}\">DEL</a>
       <a href=\"index.php?a=edit&amp;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 czerwiec 2015 - 10:53

  • 0

unbreak

    WT Elite

  • 1936 postów
    • Czas spędzony online: 27d 8h 38m 24s
506
Znakomita!
  • Location/home/unbreak

Napisano 03 czerwiec 2015 - 11:30

#2
Wywal:
mysql_close($connection);
z linii 15
  • 1

webDeveloper


Kicek

    Nowy użytkownik

  • 19 postów
    • Czas spędzony online: 1d 15h 52m 7s
-1
Neutralna

Napisano 03 czerwiec 2015 - 13:19

#3

Wywal:

mysql_close($connection);
z linii 15

 

Dzieki za pomoc, zadziałało, ale mam takie coś:

1geg.jpg

 

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 czerwiec 2015 - 13:49

  • 0

unbreak

    WT Elite

  • 1936 postów
    • Czas spędzony online: 27d 8h 38m 24s
506
Znakomita!
  • Location/home/unbreak

Napisano 03 czerwiec 2015 - 14:24

#4
"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.


  • 2

webDeveloper


Kicek

    Nowy użytkownik

  • 19 postów
    • Czas spędzony online: 1d 15h 52m 7s
-1
Neutralna

Napisano 03 czerwiec 2015 - 14:26

#5
"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 czerwiec 2015 - 14:32

  • 0

unbreak

    WT Elite

  • 1936 postów
    • Czas spędzony online: 27d 8h 38m 24s
506
Znakomita!
  • Location/home/unbreak

Napisano 03 czerwiec 2015 - 14:32

#6

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.


  • 1

webDeveloper


Kicek

    Nowy użytkownik

  • 19 postów
    • Czas spędzony online: 1d 15h 52m 7s
-1
Neutralna

Napisano 03 czerwiec 2015 - 15:23

#7

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.


  • 0

Snake_

    Nowy użytkownik

  • 18 postów
    • Czas spędzony online: 1d 1h 42m 14s
3
Neutralna

Napisano 04 czerwiec 2015 - 08:13

#8

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

  • 2

Kicek

    Nowy użytkownik

  • 19 postów
    • Czas spędzony online: 1d 15h 52m 7s
-1
Neutralna

Napisano 04 czerwiec 2015 - 12:31   Najlepsza odpowiedź

#9

Dzięki bardzo. Plusy dałem.


  • 0




Użytkownicy przeglądający ten temat: 0

0 użytkowników, 0 gości, 0 anonimowych