Jump to content

Photo
- - - - -

Zapytanie do bazy danych o kilka rzeczy


Best Answer Kicek, 04 June 2015 - 12:31

Dzięki bardzo. Plusy dałem.

Go to the full post


8 replies to this topic
  • Please log in to reply
Kicek

    Nowy użytkownik

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

Posted 03 June 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.


Edited by Kicek, 03 June 2015 - 10:53 .

  • 0

unbreak

    WT Elite

  • 1937 posts
    • Czas spędzony online: 27d 8h 43m 36s
506
Znakomita!
  • Location/home/unbreak

Posted 03 June 2015 - 11:30

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

webDeveloper


Kicek

    Nowy użytkownik

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

Posted 03 June 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?


Edited by Kicek, 03 June 2015 - 13:49 .

  • 0

unbreak

    WT Elite

  • 1937 posts
    • Czas spędzony online: 27d 8h 43m 36s
506
Znakomita!
  • Location/home/unbreak

Posted 03 June 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 posts
    • Czas spędzony online: 1d 15h 52m 7s
-1
Neutralna

Posted 03 June 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?


Edited by Kicek, 03 June 2015 - 14:32 .

  • 0

unbreak

    WT Elite

  • 1937 posts
    • Czas spędzony online: 27d 8h 43m 36s
506
Znakomita!
  • Location/home/unbreak

Posted 03 June 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 posts
    • Czas spędzony online: 1d 15h 52m 7s
-1
Neutralna

Posted 03 June 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 posts
    • Czas spędzony online: 1d 1h 42m 14s
3
Neutralna

Posted 04 June 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 posts
    • Czas spędzony online: 1d 15h 52m 7s
-1
Neutralna

Posted 04 June 2015 - 12:31   Best Answer

#9

Dzięki bardzo. Plusy dałem.


  • 0




0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users