2013-06-12 7 views
0

Ceci est un peu difficile à expliquer, mais j'aimerais obtenir des données d'une table entre une rangée de rangées où la rangée a un point de départ et de fin d'entrée.PHP MySQL Sélection de données entre une ligne contenant des données spécifiques et une ligne contenant des données spécifiques

234 **************************************************** 
235 some data 
236 more data 
237 even more data 
238 etc... 
239 **************************************************** 

donc entre le * 's est les données que je suis intéressé. Le problème est que cela varie, de sorte que le numéro de ligne sera différent à chaque fois. Et il peut apparaître plus d'une fois dans le tableau, ce qui est correct pour tirer chaque entrée. En fait, c'est nécessaire.

Laissez-moi savoir si vous avez besoin de plus d'info ...

+0

Pouvez-vous expliquer plus ce que vous voulez faire lorsque la ligne de délimitation se produit plus d'une fois? IE, vous voulez tout du premier au dernier? ou vous voulez que toutes les lignes entre chaque rangée de délimiteur en tant que résultat? – Jessica

+0

Il y a un "id" int, "info" varchar. Donc l'identifiant est vraiment juste représentatif d'un "numéro de ligne", la colonne info contient les données à extraire. Les données à tirer sont entre les * et cela variera à peu près à chaque fois. Donc je veux toutes les données du premier ensemble de * au deuxième ensemble de *. Ensuite, si cela se produit plus d'une fois dans la table pour répéter le résultat. Il est également possible de tirer le * si nécessaire. Chaque rangée devrait être tirée. – Rik

+0

Je pense que je comprends, affichant une réponse bientôt. – Jessica

Répondre

1

Je ne pense pas que vous pouvez le faire juste en SQL, voici comment je l'ai fait en PHP en utilisant deux requêtes et une logique PHP pour construire la deuxième requête.

//this array is to simulate your table, don't make it. 
$data = [1 => '*****', 'This', 'is', 'data', '*****', '*****', 'more', 'data', '*****', 'random', '*****', 'rows', '*****']; 

//Run a query to get all the ids 
$sql = "SELECT id FROM tbl WHERE data = '*****' ORDER BY id ASC"; 
//assign them to an array - I did it manually. 
$ids = [1, 5, 6, 9, 11, 13]; 

//Build the query to get the end sets. 
$query = "SELECT * FROM tbl WHERE "; 
while (count($ids)) { 
    $start = array_shift($ids); 
    $end = array_shift($ids); 
    $query .= "(id >= $start AND id <= $end) OR "; 
} 
$query = trim($query, " OR "); 
echo $query; 
+0

qui était parfait (après un peu de violon). A fait exactement ce que j'étais après. Merci beaucoup! – Rik

+0

Vous êtes les bienvenus :) – Jessica

0

La valeur que vous êtes intéressé est stocké dans une colonne de table (cellule)? Si oui, de quel type de données s'agit-il? S'il s'agit de données textuelles, vous pouvez utiliser la fonction MATCH ou REGEXP http://dev.mysql.com/doc/refman/5.7/en/regexp.html#operator_regexp.

Mais remarquez que ce sera très lent.

+0

le code ci-dessus est assez représentatif de la table. Le numéro est la colonne id. Le * etc est la colonne 'info'. Les données que je suis après est dans la colonne 'info' – Rik

Questions connexes