Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL]selekcja danych z pól o zmiennej strukturze
Forum PHP.pl > Forum > Przedszkole
KrzywyPaw
Witam,
Mam problem :
potrzebuję wydobyć listę liter (a,b,c,f,k) z kolumny "symbol" w takiej przykładowej tabeli "towar"
1 a, b, c
2 c
3 a
4 f, a, c
5 a
6 c
7 a, b
8 k, c
9 a
10 a, b

po zastosowaniu SELECT DISTINCT :
$a=mysql_query("SELECT DISTINCT symbol FROM towar") or die(mysql_error());

otrzymuje
1 a, b, c
2 c
3 a
4 f, a, c
5 a, b
6 k, c

a to nie spełnia moich oczekiwań, wydaje mi się,że powinienem zastosować funkcję explode() z separatorem ", " ale nie umiem tego zorganizować sad.gif
Z góry dziękuję za pomoc PK
rad11
DISTINCT grupuje tylko czyli jak masz dwa c to zrobi jedno c tak jak masz w wyniku. Mozesz uzyc po stronie PHP explode i wybrac tylko te ktore Cie interesuja ale w SQL tez da rade to zrobic.

PHP

  1. $exp = explode(',', $array);
  2.  
  3. foreach($exp as $v){
  4.  
  5. if($v == 'a' || $v == 'b'){
  6. echo $v;
  7. }
  8.  
  9. }


SQL(powinno dzialac musisz sprawdzic)

  1. SELECT * FROM towar
  2. WHERE litera LIKE '%a%' OR litera LIKE %b%;
KrzywyPaw
To rozwiązani SQL bardziej mi się podoba, przymierzałem się nawet do niego.
Problem w tym, że nie wiem jakie "litery" mogą się pojawić w bazie.
Potrzebuje wydobyć z kolumny "symbol" listę liter, by potem móc wyświetlić np. wszystkie wiersze w których w kolumnie "symbol" występuje przykładowo litera "a".
rad11
To raczej musisz uzyc PHP bedzie szybciej i latwiej.

  1.  
  2. foreach($array as $v){
  3.  
  4. if(strpos($v['rekord'], 'a')){
  5. echo $v['rekord'];
  6. }
  7.  
  8. }
KrzywyPaw
Dzięki za konsultację muszę to przetrawić smile.gif
PK

rad11 przemyślałem twoją propozycję ale jeśli dobrzeją rozumiem to dotyczy sposobu wyświetlenia rekordu z "symbolem" np ."a", to umiem zrobić bezpośrednio w SQL

  1. $litera='a';
  2. $select=mysql_query("SELECT symbol, nazwa FROM towar WHERE symbol LIKE '%{$litera}%' ORDER BY symbol");
  3. $ilosc=mysql_num_rows($select);
  4. echo'Znaleziono: '.$ilosc.' wyników<br /><br />';
  5. for($x=0;$x<$ilosc;$x++)
  6. {
  7. $row=mysql_fetch_assoc($select);
  8. echo $x+1;
  9. echo '. ';
  10. echo $row['nazwa'];
  11. }


Dla mnie problemem jest wyciągnięcie listy liter,
Do tabeli towar zawartość kolumny symbol - przykładowe litery będzie wstawiał użytkownik bazy i ja z góry nie wiem jakie to będą litery.
Muszę pobrać listę aktualnie występujących liter by następnie one były kluczem do kolejnych operacji.
[Może przykład z literami nie był najszczęśliwszy - powiedzmy że to jest chiński alfabet i jest za dużo możliwości by każdą po kolei badać smile.gif]
rad11
Ale uzytkownik bazy bedziesz wstawiac te litery bezposrednio do bazy przy uzyciu phpmyadmina czy poprzez jakis formularz?
KrzywyPaw
Przygotowałem mu mały skrypcik do ładowania nowych rekordów i kasowania nieaktualnych








questionmark.gifquestionmark.gif

Może ktoś jeszcze ma pomysł na rozwiązanie problemu questionmark.gif?








questionmark.gif questionmark.gif

Jakoś się nie doczekałem sad.gif

W międzyczasie jeszcze poczytałem i zdecydowałem podzielić kolumną na kilka tak by każdy symbol był w innej.


Zamykam temat.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.