Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL]Proste zapytanie mysql, wyciąganie nazw tagów
riczlogan
post 16.05.2012, 13:24:23
Post #1





Grupa: Zarejestrowani
Postów: 14
Pomógł: 0
Dołączył: 21.11.2011

Ostrzeżenie: (0%)
-----


Mam tabele

News
id nazwa tagi
1 Programowanie 1,3
oraz

Tagi
id nazwa
1 PHP
2 C
3 Java

W jaki sposób wyciągnąć jakie tagi ma News (nazwy tagów)?
Go to the top of the page
+Quote Post
miniol
post 16.05.2012, 13:29:53
Post #2





Grupa: Zarejestrowani
Postów: 84
Pomógł: 4
Dołączył: 25.03.2011

Ostrzeżenie: (0%)
-----


Tagi najpierw dzielisz w PHP za pomocą funkcji explode, a następnie w zapytaniu mysql używasz polecenia JOIN.
Go to the top of the page
+Quote Post
skowron-line
post 16.05.2012, 14:15:11
Post #3





Grupa: Zarejestrowani
Postów: 4 340
Pomógł: 542
Dołączył: 15.01.2006
Skąd: Olsztyn/Warszawa

Ostrzeżenie: (0%)
-----


Cytat(miniol @ 16.05.2012, 12:29:53 ) *
Tagi najpierw dzielisz w PHP za pomocą funkcji explode, a następnie w zapytaniu mysql używasz polecenia JOIN.

Chyba chodziło Ci o IN

Edit:
@riczlogan taki sposób przechowywania danych jest dość kiepski.

Ten post edytował skowron-line 16.05.2012, 14:15:46


--------------------
I'm so fast that last night I turned off the light switch in my hotel room and was in bed before the room was dark - Muhammad Ali.
Peg jeżeli chcesz uprawiać sex to dzieci muszą wyjść, a jeżeli chcesz żeby był dobry ty też musisz wyjść - Al Bundy.

QueryBuilder, Mootools.net, bbcradio1::MistaJam
http://www.phpbench.com/
Go to the top of the page
+Quote Post
riczlogan
post 16.05.2012, 14:45:05
Post #4





Grupa: Zarejestrowani
Postów: 14
Pomógł: 0
Dołączył: 21.11.2011

Ostrzeżenie: (0%)
-----


Czyli coś takiego?
  1. $query = mysql_query("SELECT tagi FROM News WHERE id=1");
  2. $row = mysql_fetch_assoc($query);
  3.  
  4.  
  5. foreach ($row as $r){
  6.  
  7. $tagi = explode(",", $r);
  8.  
  9. echo $tagi[0];
  10. echo '<br/>';
  11. echo $tagi[1];
  12. }


SELECT Tagi.nazwa FROM Tagi, News WHERE News.tagi IN ( $tagi[0], $tagi[1] );

Go to the top of the page
+Quote Post
skowron-line
post 16.05.2012, 15:28:29
Post #5





Grupa: Zarejestrowani
Postów: 4 340
Pomógł: 542
Dołączył: 15.01.2006
Skąd: Olsztyn/Warszawa

Ostrzeżenie: (0%)
-----


  1. $query = mysql_query("SELECT tagi FROM News WHERE id=1");
  2. $row = mysql_fetch_assoc($query);
  3.  
  4.  
  5. foreach ($row as $r){
  6.  
  7. $query2 = mysql_query('SELECT Tagi.nazwa FROM Tagi, News WHERE News.tagi IN ('. $r['tagi'] .')');
  8.  
  9. }
  10.  

*pisane z palca.


--------------------
I'm so fast that last night I turned off the light switch in my hotel room and was in bed before the room was dark - Muhammad Ali.
Peg jeżeli chcesz uprawiać sex to dzieci muszą wyjść, a jeżeli chcesz żeby był dobry ty też musisz wyjść - Al Bundy.

QueryBuilder, Mootools.net, bbcradio1::MistaJam
http://www.phpbench.com/
Go to the top of the page
+Quote Post
riczlogan
post 16.05.2012, 20:40:50
Post #6





Grupa: Zarejestrowani
Postów: 14
Pomógł: 0
Dołączył: 21.11.2011

Ostrzeżenie: (0%)
-----


Chyba to zapytanie jest złe. Wyświetla mi nazwy WSZYSTKICH tagów a nie tagów konkretnego newsa (nawet jak w phpmyadmin dam

SELECT Tagi.nazwa
FROM Tagi, News
WHERE News.tagi IN (1, 3)

)
Go to the top of the page
+Quote Post
miniol
post 16.05.2012, 20:59:16
Post #7





Grupa: Zarejestrowani
Postów: 84
Pomógł: 4
Dołączył: 25.03.2011

Ostrzeżenie: (0%)
-----


Cytat(skowron-line @ 16.05.2012, 15:15:11 ) *
Chyba chodziło Ci o IN

Wydaje mi się, że JOIN jest odpowiedni dla jego przykładu. I właśnie z niego bym radził skorzystać.
Go to the top of the page
+Quote Post
riczlogan
post 17.05.2012, 07:49:09
Post #8





Grupa: Zarejestrowani
Postów: 14
Pomógł: 0
Dołączył: 21.11.2011

Ostrzeżenie: (0%)
-----


A w jaki sposób mogę kolumnę tagi z News przenieść do nowej tabeli tagi_news tak żeby mieć tam id_newsa id_tagu. Można to jakoś zautomatyzować? Mógłbym prosić o jakieś ogólne "kroki" ?
Go to the top of the page
+Quote Post
bostaf
post 17.05.2012, 08:50:14
Post #9





Grupa: Zarejestrowani
Postów: 374
Pomógł: 79
Dołączył: 6.04.2010
Skąd: Ostrów Wielkopolski

Ostrzeżenie: (0%)
-----


Cytat(riczlogan @ 17.05.2012, 08:49:09 ) *
A w jaki sposób mogę kolumnę tagi z News przenieść do nowej tabeli tagi_news tak żeby mieć tam id_newsa id_tagu. Można to jakoś zautomatyzować? Mógłbym prosić o jakieś ogólne "kroki" ?


  1. CREATE TABLE tagi_news SELECT id AS id_newsa, tagi AS id_tagu FROM News

Z tym, że w Twojej tabeli "News" kolumna "tagi" przechowuje kilka tagów a najlepiej by było gdyby nowa tabela "tagi_news" przechowywała tylko jeden identyfikator tagu. Czyli, że trzeba by było zastosować regex na kolumnie "tagi", czego samym SQLem nie zrobisz. Piszę "samym" bo można zastosować jakąś bibliotekę do obsługi wyrażeń regularnych w MySQLu, np. LIB_MYSQLUDF_PREG. To jednak wymaga nieco większej niż podstawowa znajomości SQLa.

Żeby osiągnąć zamierzony efekt (czyli jeden id newsa - jeden id tagu) bez zaawansowanej wiedzy, musiałbyś wykorzystać PHP.
  1. $result = mysql_query("SELECT id, tagi FROM news");
  2. while($row = mysql_fetch_assoc($result)) {
  3. $newsy_tagi[$row['id']] = explode(',', $row['tagi']);
  4. }
  5.  
  6. mysql_query("CREATE TABLE tagi_news (id_newsa int(11) NULL, id_tagu int(11) NULL)");
  7.  
  8. foreach($newsy_tagi as $id_newsa => $tagi)
  9. foreach($tagi as $id_tagu)
  10. mysql_query("INSERT INTO tagi_news (id_newsa, id_tagu) VALUES ('$id_newsa', '$id_tagu')");
  11.  
  12. echo 'Zrobione.';
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 18.07.2025 - 03:01